From e9d6c2e5bfcb21eca139815c7dc9c86aa4811636 Mon Sep 17 00:00:00 2001 From: or-else Date: Fri, 13 Feb 2026 15:38:45 +0300 Subject: [PATCH] fix #139: use dvh/dvw css units for the top viewport size --- css/base.css | 2 + css/base.min.css | 2 +- umd/330.prod.js.map | 2 +- umd/537.prod.js.map | 2 +- umd/892.prod.js | 2 +- umd/892.prod.js.map | 2 +- umd/index.prod.js.map | 2 +- umd/tinode.dev.js | 938 +++++++++++++++++- umd/tinode.dev.js.map | 2 +- umd/tinode.prod.js | 2 +- umd/tinode.prod.js.map | 2 +- ...xports_parsePhoneNumberWithError_js.dev.js | 24 +- ...ts_parsePhoneNumberWithError_js.dev.js.map | 2 +- 13 files changed, 912 insertions(+), 72 deletions(-) diff --git a/css/base.css b/css/base.css index 0b18caf1..7a39e24f 100644 --- a/css/base.css +++ b/css/base.css @@ -299,6 +299,8 @@ html, body { height: 100%; width: 100%; + height: 100dvh; + width: 100dvw; font-size: 10pt; /* 13.33 px/rem */ color: var(--clr-text-primary); overflow: hidden; diff --git a/css/base.min.css b/css/base.min.css index bcd53dca..315b5729 100644 --- a/css/base.min.css +++ b/css/base.min.css @@ -1 +1 @@ -:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:grey;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#c4e0a3,#3e5c1f);--clr-bubble-left-bg-flash:light-dark(#94a97c,#2c4517);--clr-bubble-right-bg:var(--clr-background-off-white);--clr-bubble-right-bg-flash:var(--clr-border-light);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:light-dark(hsla(0,0%,100%,.8),rgba(40,40,40,.8));--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}*{box-sizing:border-box;font-family:Roboto,Arial,sans-serif;margin:0;padding:0;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track);scrollbar-width:thin;text-rendering:optimizeLegibility}body,html{background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg);color:var(--clr-text-primary);font-size:10pt;height:100%;overflow:hidden;width:100%}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{line-height:1.5;padding:.5rem .75rem}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{border-radius:50%;height:100%;width:100%}img.avatar.self{padding:7%}button{border:1px solid var(--clr-transparent);border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);cursor:pointer;display:inline-block;font-family:inherit;font-size:1.05rem;font-weight:400;height:2.2rem;line-height:2.2rem;margin:0 .35rem;min-width:5rem;padding-left:1.2rem;padding-right:1.2rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap}button[disabled],html input[disabled]{box-shadow:none;cursor:default;filter:grayscale(50%);opacity:.65}button.round{border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);height:3rem;line-height:3.5rem;margin:0;outline:none;padding:0;width:3rem;z-index:2}button.round.small{box-shadow:0 2px .35rem 0 var(--clr-shadow-button);height:2rem;line-height:2rem;width:2rem}button:active:not([disabled]),button:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);border:1px solid var(--clr-button-outline-border);box-shadow:none;color:var(--clr-button-outline-text)}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){background-color:var(--clr-button-outline-hover-bg);color:var(--clr-button-outline-text)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{background:var(--clr-transparent);border:none;color:var(--clr-input-text);font-family:inherit;font-size:1.1rem;margin:.25rem 0;outline:none;padding:0 .125rem}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],textarea{border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);height:2.5rem;transition:all .1s ease-in-out,height 0s}input[type=email],input[type=password],input[type=tel],input[type=text],textarea{width:100%}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{padding-top:.45rem;resize:none}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{background-color:var(--clr-scrollbar-track);-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{background-color:var(--clr-bright);border-radius:.2rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);list-style:none;padding-bottom:.35rem;padding-top:.35rem;position:absolute;width:12rem;z-index:4}ul.menu>li{cursor:pointer;padding:.75rem .75rem .75rem 1.25rem}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{height:1px;margin:2px;padding:0}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{opacity:.6;pointer-events:none}.menuTrigger{background-color:inherit;border-radius:.7rem;height:1.4rem;line-height:1.4rem;opacity:0;position:absolute;right:.25rem;text-align:center;user-select:none;width:1.4rem}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{align-items:center;background:var(--clr-alert-overlay-bg);display:flex;height:100%;justify-content:center;overflow:hidden;padding:1rem;position:absolute;width:100%;z-index:3}div.alert{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:min-content;margin:auto 2rem;max-height:40rem;max-width:24rem;min-width:16rem;overflow:hidden;padding:1rem;position:relative;width:fit-content}div.alert-container .title{color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;padding:0 0 .35rem;position:relative;width:100%}div.alert-container .title.with-control{align-items:center;display:flex;flex:none;justify-content:space-between;padding:.5rem .5rem 0;position:relative}div.alert-container .content{padding:.5rem 0;position:relative}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset);display:block;height:.45rem;min-height:.3rem;width:100%}.hr.thin{height:.015rem}.divider{border-left:1.5px groove var(--clr-border-muted);display:inline-block;margin:0 .25rem;width:1px}.ellipsized{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.flat-button{align-items:center;background-color:var(--clr-bright);display:flex;font-weight:400;height:2em;line-height:2em;margin:.15rem .35rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap;z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.disabled,.flat-button.disabled:focus,.flat-button.disabled:hover{color:var(--clr-primary-accent);cursor:default;filter:grayscale(75%);opacity:.75}.flat-button.faux{background-color:var(--clr-background-extra-light-gray);border:1px solid var(--clr-text-tertiary);border-radius:3px;display:inline-block;height:1.4em;line-height:1.4em;margin:.15rem;padding:0 .35rem;text-transform:none}.action-button{background-color:var(--clr-background-off-white);border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);color:var(--clr-text-secondary);display:block;font-size:1.8rem;height:3.25rem;margin:0;min-height:unset;min-width:unset;outline:none;padding:0;position:absolute;transition:all .15s;width:3.25rem;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){background-color:var(--clr-primary-action-hover);color:var(--clr-text-tertiary-activated)}.action-button:active{background-color:var(--clr-primary-action);color:var(--clr-text-tertiary-activated)}.action-button.hidden{bottom:2.625rem;font-size:1px;height:1px;line-height:1px;opacity:0;right:2.625rem;width:1px}.group-focus{outline:none}#mountPoint{height:100%;padding-bottom:1rem;padding-top:1rem}#noscript-message{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;flex-direction:column;margin-left:auto;margin-right:auto;margin-top:5rem;max-width:30rem;overflow:hidden;position:relative}#noscript-title{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue);font-size:120%;font-weight:bolder;padding:1rem}#noscript-content{padding:1rem}#app-container{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;height:100%;margin-left:auto;margin-right:auto;max-width:84rem;overflow:hidden;position:relative}#sidepanel{flex-grow:0;flex-shrink:0.3;min-width:18rem;width:24rem}#sidepanel,#topic-view{display:flex;flex-direction:column;height:100%;position:relative}#topic-view{overflow-x:hidden;width:100%}#info-view{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;height:100%;min-width:18rem;position:relative;width:24rem}.center-medium-text{align-items:center;display:flex;font-size:1.4rem;height:100%;justify-content:center;text-align:center;width:100%}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{background-color:var(--clr-background-off-white);border-radius:.1rem;margin:.25rem;padding:.25rem;position:relative}div.in-place-edit,span.in-place-edit{border-bottom:1px dashed var(--clr-border-muted);cursor:pointer;display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;vertical-align:baseline;width:100%}.in-place-edit.short{align-items:center;display:inline-flex;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;color:var(--clr-text-disabled);cursor:default}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{font-size:unset;height:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{font-size:1.1rem;margin:.35rem 0;vertical-align:middle}table.permission-editor td.checkbox{color:var(--clr-text-tertiary);text-align:center}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{border-bottom:none;cursor:pointer}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{box-shadow:0 1px 2px var(--clr-shadow-gray-strong);flex:none;height:var(--caption-panel-height);overflow-x:hidden;white-space:nowrap;z-index:1}.caption-panel,.dialog-buttons{align-items:center;display:flex;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{flex-grow:0;flex-shrink:0;position:relative}.bot-form{display:flex;flex-direction:column;line-height:2rem;min-width:8rem;overflow:hidden}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);display:inline-block;font-size:inherit;height:2rem;line-height:2rem;margin:.15rem;text-transform:none}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{background-color:var(--clr-primary-wash);color:var(--clr-dk-fg-5);outline:0}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);line-height:1;padding-left:.5rem}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-left:.5rem;margin-right:auto}#self-avatar{border-radius:50%;flex:none;height:3rem;min-width:3rem;width:3rem}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{left:.6rem;position:absolute}.info-box{display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem;position:relative}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark);display:flex}.info-box.warning{background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark);display:flex}.info-box.info{background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark);display:flex}.info-box .cancel .material-icons{color:var(--clr-text-secondary);font-size:1rem}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{height:100%;margin-bottom:auto;margin-top:.25rem;overflow-x:hidden;overflow-y:auto;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);cursor:pointer;display:flex;flex-grow:0;flex-shrink:0;min-height:3.75rem;overflow-x:hidden;padding:.35rem .25rem .5rem .35rem;position:relative}.contact-box.small>li{min-height:2.5rem;padding:.25rem .25rem .35rem .35rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{background-color:var(--clr-background-blue-gray-75);border-right:1.5px solid var(--clr-secondary-accent)}.contact-box>li.action{border-bottom:none;min-height:2.5rem}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{color:light-dark(#777,#666);margin-bottom:.2rem}.contact-box .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-height:3rem;min-width:3rem;overflow:hidden;padding:0;position:relative;width:3rem}.contact-box .avatar{border-radius:50%;height:3rem;width:3rem}.contact-box.small .avatar-box{font-size:1.2rem;height:2rem;min-height:2rem;min-width:2rem;width:2rem}.contact-box.small .avatar{height:2rem;width:2rem}.avatar.deleted{filter:grayscale(1);opacity:.75}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;font-size:2.4rem;justify-content:space-around;line-height:3rem}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{align-items:center;display:flex;flex-direction:row}.contact-box .action-text{cursor:pointer;font-size:.95rem;line-height:2.5rem;margin:0 auto;text-align:center}img.channel{height:1.25rem;margin-left:.3rem;vertical-align:middle;width:1.25rem}.large img.channel{height:1.45rem;margin-bottom:.15rem;margin-left:.5rem;width:1.45rem}.avatar-box .online,.offline{border-radius:50%;bottom:.1rem;flex-shrink:0;height:.75rem;min-height:.75rem;min-width:.75rem;position:absolute;right:0;width:.75rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{border:0 solid var(--clr-transparent);color:var(--clr-secondary-accent);overflow:visible;padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{background-color:var(--clr-bright);bottom:0;font-size:1.5rem;height:1.5rem;position:absolute;right:0;width:1.5rem}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{bottom:1rem;position:absolute;right:1rem}.panel-form{display:flex;flex-direction:column;padding:0;position:relative}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;flex-grow:0;line-height:1.5;padding:.5rem .75rem;position:relative}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{flex-grow:1;padding:0!important}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-bottom:.25rem;margin-top:.25rem}.avatar-upload{display:flex;flex-direction:column;flex-shrink:0;font-size:4.5rem;height:10.5rem;margin:.25rem;padding:0;position:relative;width:10rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%);font-size:1rem;opacity:0;position:absolute;right:0;top:0}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{height:10rem;position:relative;width:10rem}.avatar-upload .avatar-box>.material-icons{font-size:4rem;line-height:10rem;position:relative;vertical-align:middle}.avatar-upload:after{clear:both;content:".";display:block;height:0;visibility:hidden}.avatar-upload .blank{border:1px dashed var(--clr-text-tertiary);color:var(--clr-text-tertiary);flex-shrink:0;font-size:1rem;line-height:10rem;text-align:center;vertical-align:middle}.avatar-upload .blank,.avatar-upload img.preview{border-radius:50%;height:10rem;overflow:hidden;width:10rem}.avatar-upload img.preview:before{background:50% no-repeat url(../img/broken_image.png);border-radius:50%;color:var(--clr-text-primary);content:" ";display:flex;font-size:.9rem;font-weight:lighter;height:10rem;justify-content:center;left:0;position:absolute;top:0;width:10rem}.avatar-upload .inputfile.hidden{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px}.avatar-upload .inputfile+label.round{align-items:center;background-color:var(--clr-background-off-white);border-radius:50%;bottom:0;box-shadow:0 1px 4px var(--clr-shadow-dialog);cursor:pointer;display:flex;height:3rem;justify-content:center;line-height:3rem;position:absolute;right:0;width:3rem;z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-width:3rem;position:relative;width:3rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;width:1.8rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{height:100%;overflow-y:hidden;position:relative}#messages-container:before{background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-position:var(--wallpaper-position);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);content:"";filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}#messages-panel{height:100%;overflow-y:scroll;padding:.75rem;position:relative}#write-only-background{background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem);height:100%;left:0;position:absolute;top:0;width:100%}#write-only-note{height:auto;top:50%;transform:translate(-50%,-50%);width:auto}#peer-messaging-disabled-note,#write-only-note{background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active);color:var(--clr-text-primary);left:50%;line-height:2rem;padding:.75rem 1.25rem;position:absolute;text-align:center}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#send-message-panel{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;flex:none;min-height:4rem;padding:.4rem .4rem .4rem .6rem;z-index:2}#send-message-panel #writing-disabled{font-size:1.2rem;text-align:center;width:100%}#send-message-wrapper{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{font-size:1.6rem;min-width:2rem}#send-message-panel .material-icons.secondary,.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{max-height:6rem;min-height:2.5rem;overflow:hidden auto}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);padding-bottom:.35rem;text-align:center;white-space:nowrap}.accept-invite-panel button{border:1px solid var(--clr-transparent);box-shadow:0 1px 2px 0 var(--clr-shadow-button);font-size:1rem;height:2em;line-height:2em;margin:.25rem}#dummy-view{align-items:center;background-color:var(--clr-cyan-50);display:flex;height:100%;justify-content:center;width:100%}#dummy-view a{display:block;text-align:center;text-decoration:none}#image-preview{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;left:0;position:absolute;top:0;width:100%;z-index:2}#preview-caption-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);display:flex;flex-grow:0;flex-shrink:0;font-size:120%;height:var(--caption-panel-height);justify-content:space-between;line-height:2rem;padding:1rem .75rem 0;z-index:3}#preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{align-items:center;background-color:var(--clr-gray-medium-bg);display:flex;height:100%;justify-content:space-around;overflow:hidden;width:100%}#image-preview-footer{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);display:flex;flex-grow:0;flex-shrink:0;height:3.2rem;justify-content:space-around;line-height:1.5rem;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{background-color:var(--clr-std-ltgray);border-radius:.5rem;display:flex;flex-direction:column;max-width:30rem;overflow-x:hidden;padding:1rem}.doc-card .avatar-box{font-size:4.5rem;height:10rem;width:10rem}.doc-card .avatar-box .material-icons{line-height:10rem}#video-container{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;justify-content:space-between;left:0;position:absolute;top:0;width:100%;z-index:3}#video-container.minimized{background-color:unset;border-radius:.5rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab;height:18rem;left:auto;right:1rem;top:1rem;user-select:none;width:18rem}#controls{align-items:center;align-self:center;bottom:2.5rem;column-gap:1rem;display:flex;justify-content:center;position:absolute;z-index:1}#controls.minimized{bottom:1.75rem;column-gap:.5rem}.incoming-call #controls{bottom:1rem}#controls button{align-items:center;border-radius:50%;box-shadow:0 3px 6px 0 var(--clr-shadow-button);display:flex;height:4rem;justify-content:center;min-width:auto;position:relative;width:4rem}#controls.minimized button{box-shadow:0 2px 4px 0 var(--clr-shadow-button);height:2.75rem;width:2.75rem}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}button.full-screen{background-color:transparent;border-radius:.5rem;box-shadow:none;height:2.5rem;left:2rem;min-width:unset;padding:0;position:absolute;top:2rem;width:2.5rem;z-index:1}.minimized button.full-screen{height:2rem;left:1rem;top:1rem;width:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized button.full-screen .material-icons{font-size:large}#video-container-panel{height:100%;position:relative;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border:2px solid var(--clr-border-light);border-radius:.5rem;overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{bottom:1rem;left:1rem;position:absolute;right:1rem;top:1rem;z-index:1}.minimized .call-party.peer{bottom:0;left:0;right:0;top:0}.call-party.self{bottom:.5rem;height:10rem;position:absolute;right:.5rem;width:10rem;z-index:2}.call-party.self[disabled]{display:none}video{height:100%;object-fit:contain;width:100%}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.caller-card .avatar-box{font-size:6rem;height:10rem;width:10rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{font-size:3.6rem;height:6rem;width:6rem}.call-party .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;max-width:12rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-party.self .caller-name.inactive{bottom:.25rem;position:absolute;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.caller-card .trusted-badge{display:inline-block}.call-party.peer .caller-name.inactive{bottom:.5rem;font-size:larger;left:1rem;margin:0 auto;position:absolute}.minimized .caller-name{border-radius:.25rem;font-weight:lighter;padding:.1rem .35rem}.incoming-call{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);margin:auto 2rem;max-width:24rem;min-width:16rem;width:fit-content}.incoming-call,.incoming-call .caller-card{display:flex;flex-direction:column;position:relative}.incoming-call .caller-card{align-items:center;height:100%;justify-content:center;left:auto;padding:4rem 3.5rem 5.5rem;top:auto;width:100%}.incoming-call .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{bottom:1rem;right:1.5rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;margin:0 .5rem;padding:0 0 3.5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{align-items:flex-end;display:flex;margin:0;padding:0}.chat-box .right{justify-content:flex-end}.bubble{border-radius:.5rem;color:var(--clr-bubble-text);display:flex;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop));height:auto;margin:0;max-width:36rem;min-width:9rem;padding:.75rem .5rem;position:relative;text-align:left;transition:background-color .5s ease-out;transition-delay:.3s}.chat-box li.single{margin-bottom:.75rem;margin-top:.25rem}.chat-box li.first{margin-bottom:.15rem;margin-top:.25rem}.chat-box li.middle{margin-bottom:.15rem;margin-top:.15rem}.chat-box li.last{margin-bottom:.75rem;margin-top:.15rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-bottom:.5rem;margin-top:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{background-color:var(--clr-bubble-meta-date-bg);font-size:smaller;padding:.5rem;text-transform:uppercase;user-select:none}.left .bubble.tip:before{background-color:var(--clr-bubble-left-bg);border-bottom-left-radius:.3rem;bottom:0;clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);content:"";height:.85rem;left:-.8rem;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{background-color:var(--clr-bubble-right-bg);border-bottom-right-radius:.3rem;bottom:0;clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);content:"";height:.85rem;left:99.8%;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{font-size:.8rem;height:1.4rem;margin-bottom:.8rem;margin-right:.8rem;min-height:1.4rem;min-width:1.4rem;position:relative;width:1.4rem}.bubble div.content-meta{width:100%}.bubble div.message-content{font-size:var(--message-text-size);margin:0;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;position:relative;width:100%}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{clear:both;content:".";display:block;height:0;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;height:0;width:4rem}.chat-box .timestamp{color:var(--clr-bubble-timestamp-text);float:right;font-size:80%;position:relative;top:.35rem;user-select:none;white-space:nowrap}.chat-box .author{color:var(--clr-bubble-author-text);font-size:80%;max-width:12em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.image-preview,.inline-image{border-radius:.1rem;overflow:hidden;position:relative}.inline-image{max-height:24rem;max-width:36rem}.inline-image>.rounded-container{border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent);bottom:2rem;margin:.25rem auto;position:relative}img.image-preview:before,img.inline-image:before{background:center no-repeat var(--clr-border-light) url(../img/broken_image.png);color:var(--clr-text-primary);display:flex;font-size:.9rem;font-weight:lighter;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}img.inline-image:before{background-size:3rem 3rem;content:attr(alt)}img.image-preview:before{background-size:10rem 10rem;content:" "}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{align-items:center;display:flex;justify-content:center;position:relative}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{background-color:hsla(0,0%,100%,.5);border-radius:.3rem;bottom:.25rem;color:var(--clr-toast-bg);font-size:80%;left:.25rem;padding:.25rem .5rem;position:absolute}.inline-video .play-control{align-items:center;background-color:rgba(0,0,0,.4);border-radius:50%;cursor:pointer;display:flex;height:4rem;justify-content:center;pointer-events:none;position:absolute;width:4rem}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{display:flex;flex-direction:column;height:100%;overflow-y:hidden;position:relative}#group-manager-buttons{background-color:var(--clr-background-blue-gray-50);border-left:1px solid var(--clr-border-light);box-shadow:0 -1px var(--clr-shadow-panel-divider);display:flex;height:4rem;justify-content:space-around;padding:.4rem;z-index:2}ul.tabbar{background:var(--clr-tabbar-bg);display:flex;flex-grow:0;flex-shrink:0;list-style:none;margin:0;overflow:hidden;padding:0 0 0 1rem;width:100%}ul.tabbar>li{box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button);height:2.4rem;position:relative}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{background:var(--clr-tabbar-inactive-border);bottom:0;content:"";height:.1rem;left:0;position:absolute;width:100%}ul.tabbar li.active:after{animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards;background:var(--clr-tabbar-active-border);bottom:0;content:"";height:.15rem;left:0;position:absolute}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{color:var(--clr-tabbar-inactive-text);font-size:1.3rem;font-variant:small-caps;font-weight:400;line-height:2.4rem;overflow:hidden;padding-left:1rem;padding-right:1rem;position:relative;text-align:center;text-decoration:none}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{background-color:var(--clr-secondary-accent);border-radius:50%;color:var(--clr-bright);display:inline-block;font-size:.75rem;font-weight:bolder;height:1.35rem;line-height:1.45rem;margin-left:.5rem;text-align:center;vertical-align:middle;width:1.35rem}.material-icons.as-badge{color:var(--clr-chip-remove-icon-bg);font-size:1.15rem;padding-left:.2rem}.badge{align-self:flex-start;background-color:var(--clr-badge-default-bg);border:1px solid var(--clr-badge-default-border);border-radius:.2rem;color:var(--clr-badge-default-text);display:inline-block;font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;margin:.05rem .1rem;padding:.05rem .25rem}.badge.green{background-color:var(--clr-badge-green-bg);border-color:var(--clr-badge-green-border);color:var(--clr-badge-green-text)}.badge.yellow{background-color:var(--clr-badge-yellow-bg);border-color:var(--clr-badge-yellow-border);color:var(--clr-badge-yellow-text)}.badge.blue{background-color:var(--clr-badge-blue-bg);border-color:var(--clr-badge-blue-border);color:var(--clr-badge-blue-text)}.badge.red{background-color:var(--clr-badge-red-bg);border-color:var(--clr-badge-red-border);color:var(--clr-badge-red-text)}.badge.magenta{background-color:var(--clr-badge-magenta-bg);border-color:var(--clr-badge-magenta-border);color:var(--clr-badge-magenta-text)}.lettertile{border-radius:50%;padding-bottom:100%;user-select:none;width:100%}.lettertile>div{align-items:center;border-radius:50%;bottom:0;color:var(--clr-lettertile-default-text);display:flex;flex-grow:0;flex-shrink:0;justify-content:center;left:0;line-height:1;padding-top:.1em;position:absolute;right:0;text-align:center;text-transform:uppercase;top:0}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;text-align:center;user-select:none;vertical-align:middle}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{font-size:85%;font-weight:700;left:39%;position:absolute;top:7%}.composed-material .second-small{font-size:62%;font-weight:700;left:30%;position:absolute;top:14%}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{border-radius:50%;color:var(--clr-lettertile-default-text);height:inherit;width:inherit}.chip-input{align-items:center;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);color:var(--clr-input-text);cursor:text;display:flex;flex-grow:1;flex-wrap:wrap;font-size:1.1rem;font-weight:400;justify-content:flex-start;margin:.25rem 0;max-height:10rem;min-height:4rem;outline:none;overflow-y:scroll;text-align:center;transition:all .1s ease-in-out}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{border:none;box-shadow:none;display:inline-block;flex:1 0 auto;min-width:4rem;width:auto}.chip,.chip-input>input[type=text]{height:1.8rem;line-height:1.8;margin:.125rem}.chip{align-items:center;background-color:var(--clr-chip-bg);border-radius:.9rem;display:flex;flex:0 0 auto;font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{text-overflow:ellipsis;white-space:nowrap}.chip>span{overflow-x:hidden}.chip.invalid{background-color:var(--clr-chip-invalid-bg);color:var(--clr-chip-invalid-text)}.chip>a{background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;color:var(--clr-chip-remove-icon-text);display:inline-block;height:1.175rem;line-height:1.15;margin:.3rem;min-width:1.175rem;text-decoration:none;width:1.175rem}.chip>a:focus,.chip>a:hover{background-color:var(--clr-chip-remove-icon-hover-bg);color:var(--clr-chip-remove-icon-hover-text);text-decoration:none}.chip .avatar-box{font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;position:relative;width:1.8rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;height:1.175rem;margin:.3rem;width:.25rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;background-color:var(--clr-bright);border-radius:50%;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);height:var(--size-small);left:0;margin-left:auto;margin-right:auto;padding:.25rem;position:absolute;right:0;top:5rem;width:var(--size-small);z-index:2}.load-spinner-box.large{height:var(--size-large);width:var(--size-large)}.load-spinner-box.clear{background-color:hsla(0,0%,100%,.5);box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{animation:spin 1.5s linear infinite;border-radius:50%;border-top:.35rem solid var(--clr-spinner-track);border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);height:2rem;width:2rem}.load-spinner-box.large .loader-spinner{height:3.5rem;width:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{background-color:var(--clr-background-blue-gray-100);border-radius:.1rem;height:.6rem;line-height:0;margin:.35rem;padding:.15rem;position:relative;width:6rem}.uploader>div>span{background-color:var(--clr-primary-action);border-radius:.08rem;display:inline-block;height:.3rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{align-self:center;height:21rem;margin:1rem auto auto;transform:translateZ(0)}.cropper,.cropper .bounding-box{border-radius:.25rem;position:relative;width:18rem}.cropper .bounding-box{background-color:var(--clr-cropper-bounding-box-bg);border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);height:18rem;overflow:hidden;z-index:1}.cropper .preview{max-height:none;max-width:none;position:absolute;z-index:-1}.cropper .cutout{border:1px dashed var(--clr-cropper-cutout-border);bottom:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);height:17.8rem;left:0;margin:auto;position:absolute;right:0;top:0;width:17.8rem;z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{cursor:move;position:absolute;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;margin:1rem auto;text-align:center;width:80%}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{border-left:.25rem solid var(--clr-reply-quote-border);border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer;font-weight:lighter;line-height:1.5em;padding:.15rem .5rem .25rem;position:relative}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{margin-bottom:.1rem;vertical-align:middle}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{align-items:center;display:flex}#reply-quote-preview .reply-quote{background-color:var(--clr-reply-quote-preview-bg);cursor:auto;margin:.35rem .5rem 0 0;width:100%}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:80%;margin:auto 1rem;overflow:hidden;padding:.5rem;position:relative;width:24rem}.forward-dialog .scrollable-panel{height:80%}.audio{align-items:center;background-color:var(--clr-audio-bg);border-radius:1.5rem;display:flex;flex:none;height:3rem;margin-left:auto}.audio canvas{height:2.6rem;margin-right:2rem;width:14rem}.audio canvas.playback{margin-right:0}.audio .duration{font-size:large}.audio-player{align-items:center;display:flex}.audio-player .material-icons.large{color:var(--clr-audio-icon);font-size:2.4rem}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{height:2.6rem;width:14rem}.audio-player canvas.playback{display:block}.audio-player div.playback{align-items:center;color:var(--clr-audio-icon);display:flex;font-size:small;justify-content:center}.audio-player .timer{color:var(--clr-audio-timer-text);font-size:smaller}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{align-items:center;display:flex;height:100%;position:relative}.pinned{background-color:var(--clr-background-off-white);background-position:50%;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);cursor:pointer;font-weight:lighter;min-width:0;padding:.15rem .5rem .25rem;transition:background .4s;width:24rem}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{align-items:center;background-color:var(--clr-background-extra-light-gray);border-radius:.25rem 0 0 .25rem;display:flex;flex-direction:column;height:100%;justify-content:space-evenly;margin-left:.35rem;padding:.2rem;position:relative;user-select:none}.pinned-scroll .dot{background-color:var(--clr-text-tertiary);border-radius:50%;height:.3rem;user-select:none;width:.3rem}.pinned-scroll .adot{background-color:var(--clr-light-blue-accent);border-radius:50%;height:.45rem;user-select:none;width:.45rem}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;bottom:0;display:flex;flex-direction:column;justify-content:space-evenly;position:absolute;right:0;top:0}.pinned-menu .menuTrigger{position:relative;right:0}.contact-card{background-color:var(--clr-background-off-white);border-radius:.5rem;display:flex;flex-direction:column;min-width:14rem;position:relative}.contact-card .avatar-box{font-size:1rem;height:1.8rem;margin-bottom:0;margin-right:.75rem;position:relative;width:1.8rem}.contact-card .contact-body{align-items:center;background-color:var(--clr-background-blue-gray-50);border-bottom:none;border-radius:.5rem .5rem 0 0;display:flex;padding:.75rem}.contact-card .contact-body .name-box{display:flex;flex-direction:column;overflow:hidden}.contact-card .contact-body .name-box .name{color:var(--clr-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-body .name-box .org{color:var(--clr-text-secondary);font-size:90%;font-weight:300;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-actions{align-items:center;background-color:var(--clr-bright);border-radius:0 0 .5rem .5rem;border-top:none;display:flex;justify-content:space-evenly;padding:0 .5rem}.contact-card .contact-actions a{cursor:pointer}.contact-card .contact-actions .divider{height:1.8rem;opacity:.5}.drag-n-drop{align-items:center;background-color:var(--clr-drag-n-drop-bg);border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;bottom:1.5rem;color:var(--clr-drag-n-drop-text);display:flex;font-size:2rem;justify-content:center;left:1.5rem;outline:.5rem solid var(--clr-drag-n-drop-outline);position:absolute;right:1.5rem;top:1.5rem;z-index:3}.country-flag{display:inline-block;font-size:larger}.dial-code{cursor:pointer;display:inline-block;margin-bottom:.15rem;vertical-align:middle;white-space:nowrap}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{cursor:pointer;font-weight:lighter;padding:.25rem .5rem .15rem;position:relative;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{color:var(--clr-primary-action);font-weight:400;position:absolute;right:.5rem}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{overflow-x:hidden;text-overflow:ellipsis}.image-grid{display:grid;gap:.35rem;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));padding:.25rem;position:relative}.image-grid-cell{border:1.5px solid transparent;border-radius:.25rem;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset);cursor:pointer;height:7rem;margin:0;overflow:hidden;padding:0;width:100%}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{align-items:center;background-color:var(--clr-toast-bg);border-radius:.5rem;bottom:2rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);color:var(--clr-toast-text);display:flex;font-weight:lighter;height:3rem;justify-content:center;left:50%;min-width:10rem;padding:.5rem 1rem;position:absolute;translate:-50%;visibility:hidden;z-index:3}div.toast.show{animation:fadein .5s,fadeout .5s 2.5s;visibility:visible}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{border-radius:0;box-shadow:none;width:100%}#info-view,#sidepanel{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized{border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong);flex-direction:row;height:11rem;left:0;top:var(--caption-panel-height);width:100%}#controls.minimized{bottom:auto;column-gap:unset;flex-direction:column;right:1rem;row-gap:.5rem}.minimized .call-party{border-radius:unset;box-shadow:unset}.call-party.self{border-radius:unset;bottom:8.5rem}} \ No newline at end of file +:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:grey;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#c4e0a3,#3e5c1f);--clr-bubble-left-bg-flash:light-dark(#94a97c,#2c4517);--clr-bubble-right-bg:var(--clr-background-off-white);--clr-bubble-right-bg-flash:var(--clr-border-light);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:light-dark(hsla(0,0%,100%,.8),rgba(40,40,40,.8));--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}*{box-sizing:border-box;font-family:Roboto,Arial,sans-serif;margin:0;padding:0;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track);scrollbar-width:thin;text-rendering:optimizeLegibility}body,html{background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg);color:var(--clr-text-primary);font-size:10pt;height:100%;height:100dvh;overflow:hidden;width:100%;width:100dvw}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{line-height:1.5;padding:.5rem .75rem}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{border-radius:50%;height:100%;width:100%}img.avatar.self{padding:7%}button{border:1px solid var(--clr-transparent);border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);cursor:pointer;display:inline-block;font-family:inherit;font-size:1.05rem;font-weight:400;height:2.2rem;line-height:2.2rem;margin:0 .35rem;min-width:5rem;padding-left:1.2rem;padding-right:1.2rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap}button[disabled],html input[disabled]{box-shadow:none;cursor:default;filter:grayscale(50%);opacity:.65}button.round{border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);height:3rem;line-height:3.5rem;margin:0;outline:none;padding:0;width:3rem;z-index:2}button.round.small{box-shadow:0 2px .35rem 0 var(--clr-shadow-button);height:2rem;line-height:2rem;width:2rem}button:active:not([disabled]),button:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);border:1px solid var(--clr-button-outline-border);box-shadow:none;color:var(--clr-button-outline-text)}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){background-color:var(--clr-button-outline-hover-bg);color:var(--clr-button-outline-text)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{background:var(--clr-transparent);border:none;color:var(--clr-input-text);font-family:inherit;font-size:1.1rem;margin:.25rem 0;outline:none;padding:0 .125rem}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],textarea{border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);height:2.5rem;transition:all .1s ease-in-out,height 0s}input[type=email],input[type=password],input[type=tel],input[type=text],textarea{width:100%}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{padding-top:.45rem;resize:none}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{background-color:var(--clr-scrollbar-track);-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{background-color:var(--clr-bright);border-radius:.2rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);list-style:none;padding-bottom:.35rem;padding-top:.35rem;position:absolute;width:12rem;z-index:4}ul.menu>li{cursor:pointer;padding:.75rem .75rem .75rem 1.25rem}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{height:1px;margin:2px;padding:0}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{opacity:.6;pointer-events:none}.menuTrigger{background-color:inherit;border-radius:.7rem;height:1.4rem;line-height:1.4rem;opacity:0;position:absolute;right:.25rem;text-align:center;user-select:none;width:1.4rem}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{align-items:center;background:var(--clr-alert-overlay-bg);display:flex;height:100%;justify-content:center;overflow:hidden;padding:1rem;position:absolute;width:100%;z-index:3}div.alert{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:min-content;margin:auto 2rem;max-height:40rem;max-width:24rem;min-width:16rem;overflow:hidden;padding:1rem;position:relative;width:fit-content}div.alert-container .title{color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;padding:0 0 .35rem;position:relative;width:100%}div.alert-container .title.with-control{align-items:center;display:flex;flex:none;justify-content:space-between;padding:.5rem .5rem 0;position:relative}div.alert-container .content{padding:.5rem 0;position:relative}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset);display:block;height:.45rem;min-height:.3rem;width:100%}.hr.thin{height:.015rem}.divider{border-left:1.5px groove var(--clr-border-muted);display:inline-block;margin:0 .25rem;width:1px}.ellipsized{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.flat-button{align-items:center;background-color:var(--clr-bright);display:flex;font-weight:400;height:2em;line-height:2em;margin:.15rem .35rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap;z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.disabled,.flat-button.disabled:focus,.flat-button.disabled:hover{color:var(--clr-primary-accent);cursor:default;filter:grayscale(75%);opacity:.75}.flat-button.faux{background-color:var(--clr-background-extra-light-gray);border:1px solid var(--clr-text-tertiary);border-radius:3px;display:inline-block;height:1.4em;line-height:1.4em;margin:.15rem;padding:0 .35rem;text-transform:none}.action-button{background-color:var(--clr-background-off-white);border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);color:var(--clr-text-secondary);display:block;font-size:1.8rem;height:3.25rem;margin:0;min-height:unset;min-width:unset;outline:none;padding:0;position:absolute;transition:all .15s;width:3.25rem;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){background-color:var(--clr-primary-action-hover);color:var(--clr-text-tertiary-activated)}.action-button:active{background-color:var(--clr-primary-action);color:var(--clr-text-tertiary-activated)}.action-button.hidden{bottom:2.625rem;font-size:1px;height:1px;line-height:1px;opacity:0;right:2.625rem;width:1px}.group-focus{outline:none}#mountPoint{height:100%;padding-bottom:1rem;padding-top:1rem}#noscript-message{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;flex-direction:column;margin-left:auto;margin-right:auto;margin-top:5rem;max-width:30rem;overflow:hidden;position:relative}#noscript-title{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue);font-size:120%;font-weight:bolder;padding:1rem}#noscript-content{padding:1rem}#app-container{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;height:100%;margin-left:auto;margin-right:auto;max-width:84rem;overflow:hidden;position:relative}#sidepanel{flex-grow:0;flex-shrink:0.3;min-width:18rem;width:24rem}#sidepanel,#topic-view{display:flex;flex-direction:column;height:100%;position:relative}#topic-view{overflow-x:hidden;width:100%}#info-view{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;height:100%;min-width:18rem;position:relative;width:24rem}.center-medium-text{align-items:center;display:flex;font-size:1.4rem;height:100%;justify-content:center;text-align:center;width:100%}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{background-color:var(--clr-background-off-white);border-radius:.1rem;margin:.25rem;padding:.25rem;position:relative}div.in-place-edit,span.in-place-edit{border-bottom:1px dashed var(--clr-border-muted);cursor:pointer;display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;vertical-align:baseline;width:100%}.in-place-edit.short{align-items:center;display:inline-flex;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;color:var(--clr-text-disabled);cursor:default}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{font-size:unset;height:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{font-size:1.1rem;margin:.35rem 0;vertical-align:middle}table.permission-editor td.checkbox{color:var(--clr-text-tertiary);text-align:center}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{border-bottom:none;cursor:pointer}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{box-shadow:0 1px 2px var(--clr-shadow-gray-strong);flex:none;height:var(--caption-panel-height);overflow-x:hidden;white-space:nowrap;z-index:1}.caption-panel,.dialog-buttons{align-items:center;display:flex;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{flex-grow:0;flex-shrink:0;position:relative}.bot-form{display:flex;flex-direction:column;line-height:2rem;min-width:8rem;overflow:hidden}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);display:inline-block;font-size:inherit;height:2rem;line-height:2rem;margin:.15rem;text-transform:none}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{background-color:var(--clr-primary-wash);color:var(--clr-dk-fg-5);outline:0}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);line-height:1;padding-left:.5rem}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-left:.5rem;margin-right:auto}#self-avatar{border-radius:50%;flex:none;height:3rem;min-width:3rem;width:3rem}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{left:.6rem;position:absolute}.info-box{display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem;position:relative}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark);display:flex}.info-box.warning{background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark);display:flex}.info-box.info{background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark);display:flex}.info-box .cancel .material-icons{color:var(--clr-text-secondary);font-size:1rem}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{height:100%;margin-bottom:auto;margin-top:.25rem;overflow-x:hidden;overflow-y:auto;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);cursor:pointer;display:flex;flex-grow:0;flex-shrink:0;min-height:3.75rem;overflow-x:hidden;padding:.35rem .25rem .5rem .35rem;position:relative}.contact-box.small>li{min-height:2.5rem;padding:.25rem .25rem .35rem .35rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{background-color:var(--clr-background-blue-gray-75);border-right:1.5px solid var(--clr-secondary-accent)}.contact-box>li.action{border-bottom:none;min-height:2.5rem}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{color:light-dark(#777,#666);margin-bottom:.2rem}.contact-box .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-height:3rem;min-width:3rem;overflow:hidden;padding:0;position:relative;width:3rem}.contact-box .avatar{border-radius:50%;height:3rem;width:3rem}.contact-box.small .avatar-box{font-size:1.2rem;height:2rem;min-height:2rem;min-width:2rem;width:2rem}.contact-box.small .avatar{height:2rem;width:2rem}.avatar.deleted{filter:grayscale(1);opacity:.75}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;font-size:2.4rem;justify-content:space-around;line-height:3rem}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{align-items:center;display:flex;flex-direction:row}.contact-box .action-text{cursor:pointer;font-size:.95rem;line-height:2.5rem;margin:0 auto;text-align:center}img.channel{height:1.25rem;margin-left:.3rem;vertical-align:middle;width:1.25rem}.large img.channel{height:1.45rem;margin-bottom:.15rem;margin-left:.5rem;width:1.45rem}.avatar-box .online,.offline{border-radius:50%;bottom:.1rem;flex-shrink:0;height:.75rem;min-height:.75rem;min-width:.75rem;position:absolute;right:0;width:.75rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{border:0 solid var(--clr-transparent);color:var(--clr-secondary-accent);overflow:visible;padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{background-color:var(--clr-bright);bottom:0;font-size:1.5rem;height:1.5rem;position:absolute;right:0;width:1.5rem}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{bottom:1rem;position:absolute;right:1rem}.panel-form{display:flex;flex-direction:column;padding:0;position:relative}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;flex-grow:0;line-height:1.5;padding:.5rem .75rem;position:relative}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{flex-grow:1;padding:0!important}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-bottom:.25rem;margin-top:.25rem}.avatar-upload{display:flex;flex-direction:column;flex-shrink:0;font-size:4.5rem;height:10.5rem;margin:.25rem;padding:0;position:relative;width:10rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%);font-size:1rem;opacity:0;position:absolute;right:0;top:0}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{height:10rem;position:relative;width:10rem}.avatar-upload .avatar-box>.material-icons{font-size:4rem;line-height:10rem;position:relative;vertical-align:middle}.avatar-upload:after{clear:both;content:".";display:block;height:0;visibility:hidden}.avatar-upload .blank{border:1px dashed var(--clr-text-tertiary);color:var(--clr-text-tertiary);flex-shrink:0;font-size:1rem;line-height:10rem;text-align:center;vertical-align:middle}.avatar-upload .blank,.avatar-upload img.preview{border-radius:50%;height:10rem;overflow:hidden;width:10rem}.avatar-upload img.preview:before{background:50% no-repeat url(../img/broken_image.png);border-radius:50%;color:var(--clr-text-primary);content:" ";display:flex;font-size:.9rem;font-weight:lighter;height:10rem;justify-content:center;left:0;position:absolute;top:0;width:10rem}.avatar-upload .inputfile.hidden{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px}.avatar-upload .inputfile+label.round{align-items:center;background-color:var(--clr-background-off-white);border-radius:50%;bottom:0;box-shadow:0 1px 4px var(--clr-shadow-dialog);cursor:pointer;display:flex;height:3rem;justify-content:center;line-height:3rem;position:absolute;right:0;width:3rem;z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-width:3rem;position:relative;width:3rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;width:1.8rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{height:100%;overflow-y:hidden;position:relative}#messages-container:before{background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-position:var(--wallpaper-position);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);content:"";filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}#messages-panel{height:100%;overflow-y:scroll;padding:.75rem;position:relative}#write-only-background{background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem);height:100%;left:0;position:absolute;top:0;width:100%}#write-only-note{height:auto;top:50%;transform:translate(-50%,-50%);width:auto}#peer-messaging-disabled-note,#write-only-note{background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active);color:var(--clr-text-primary);left:50%;line-height:2rem;padding:.75rem 1.25rem;position:absolute;text-align:center}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#send-message-panel{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;flex:none;min-height:4rem;padding:.4rem .4rem .4rem .6rem;z-index:2}#send-message-panel #writing-disabled{font-size:1.2rem;text-align:center;width:100%}#send-message-wrapper{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{font-size:1.6rem;min-width:2rem}#send-message-panel .material-icons.secondary,.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{max-height:6rem;min-height:2.5rem;overflow:hidden auto}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);padding-bottom:.35rem;text-align:center;white-space:nowrap}.accept-invite-panel button{border:1px solid var(--clr-transparent);box-shadow:0 1px 2px 0 var(--clr-shadow-button);font-size:1rem;height:2em;line-height:2em;margin:.25rem}#dummy-view{align-items:center;background-color:var(--clr-cyan-50);display:flex;height:100%;justify-content:center;width:100%}#dummy-view a{display:block;text-align:center;text-decoration:none}#image-preview{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;left:0;position:absolute;top:0;width:100%;z-index:2}#preview-caption-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);display:flex;flex-grow:0;flex-shrink:0;font-size:120%;height:var(--caption-panel-height);justify-content:space-between;line-height:2rem;padding:1rem .75rem 0;z-index:3}#preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{align-items:center;background-color:var(--clr-gray-medium-bg);display:flex;height:100%;justify-content:space-around;overflow:hidden;width:100%}#image-preview-footer{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);display:flex;flex-grow:0;flex-shrink:0;height:3.2rem;justify-content:space-around;line-height:1.5rem;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{background-color:var(--clr-std-ltgray);border-radius:.5rem;display:flex;flex-direction:column;max-width:30rem;overflow-x:hidden;padding:1rem}.doc-card .avatar-box{font-size:4.5rem;height:10rem;width:10rem}.doc-card .avatar-box .material-icons{line-height:10rem}#video-container{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;justify-content:space-between;left:0;position:absolute;top:0;width:100%;z-index:3}#video-container.minimized{background-color:unset;border-radius:.5rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab;height:18rem;left:auto;right:1rem;top:1rem;user-select:none;width:18rem}#controls{align-items:center;align-self:center;bottom:2.5rem;column-gap:1rem;display:flex;justify-content:center;position:absolute;z-index:1}#controls.minimized{bottom:1.75rem;column-gap:.5rem}.incoming-call #controls{bottom:1rem}#controls button{align-items:center;border-radius:50%;box-shadow:0 3px 6px 0 var(--clr-shadow-button);display:flex;height:4rem;justify-content:center;min-width:auto;position:relative;width:4rem}#controls.minimized button{box-shadow:0 2px 4px 0 var(--clr-shadow-button);height:2.75rem;width:2.75rem}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}button.full-screen{background-color:transparent;border-radius:.5rem;box-shadow:none;height:2.5rem;left:2rem;min-width:unset;padding:0;position:absolute;top:2rem;width:2.5rem;z-index:1}.minimized button.full-screen{height:2rem;left:1rem;top:1rem;width:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized button.full-screen .material-icons{font-size:large}#video-container-panel{height:100%;position:relative;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border:2px solid var(--clr-border-light);border-radius:.5rem;overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{bottom:1rem;left:1rem;position:absolute;right:1rem;top:1rem;z-index:1}.minimized .call-party.peer{bottom:0;left:0;right:0;top:0}.call-party.self{bottom:.5rem;height:10rem;position:absolute;right:.5rem;width:10rem;z-index:2}.call-party.self[disabled]{display:none}video{height:100%;object-fit:contain;width:100%}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.caller-card .avatar-box{font-size:6rem;height:10rem;width:10rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{font-size:3.6rem;height:6rem;width:6rem}.call-party .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;max-width:12rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-party.self .caller-name.inactive{bottom:.25rem;position:absolute;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.caller-card .trusted-badge{display:inline-block}.call-party.peer .caller-name.inactive{bottom:.5rem;font-size:larger;left:1rem;margin:0 auto;position:absolute}.minimized .caller-name{border-radius:.25rem;font-weight:lighter;padding:.1rem .35rem}.incoming-call{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);margin:auto 2rem;max-width:24rem;min-width:16rem;width:fit-content}.incoming-call,.incoming-call .caller-card{display:flex;flex-direction:column;position:relative}.incoming-call .caller-card{align-items:center;height:100%;justify-content:center;left:auto;padding:4rem 3.5rem 5.5rem;top:auto;width:100%}.incoming-call .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{bottom:1rem;right:1.5rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;margin:0 .5rem;padding:0 0 3.5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{align-items:flex-end;display:flex;margin:0;padding:0}.chat-box .right{justify-content:flex-end}.bubble{border-radius:.5rem;color:var(--clr-bubble-text);display:flex;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop));height:auto;margin:0;max-width:36rem;min-width:9rem;padding:.75rem .5rem;position:relative;text-align:left;transition:background-color .5s ease-out;transition-delay:.3s}.chat-box li.single{margin-bottom:.75rem;margin-top:.25rem}.chat-box li.first{margin-bottom:.15rem;margin-top:.25rem}.chat-box li.middle{margin-bottom:.15rem;margin-top:.15rem}.chat-box li.last{margin-bottom:.75rem;margin-top:.15rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-bottom:.5rem;margin-top:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{background-color:var(--clr-bubble-meta-date-bg);font-size:smaller;padding:.5rem;text-transform:uppercase;user-select:none}.left .bubble.tip:before{background-color:var(--clr-bubble-left-bg);border-bottom-left-radius:.3rem;bottom:0;clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);content:"";height:.85rem;left:-.8rem;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{background-color:var(--clr-bubble-right-bg);border-bottom-right-radius:.3rem;bottom:0;clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);content:"";height:.85rem;left:99.8%;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{font-size:.8rem;height:1.4rem;margin-bottom:.8rem;margin-right:.8rem;min-height:1.4rem;min-width:1.4rem;position:relative;width:1.4rem}.bubble div.content-meta{width:100%}.bubble div.message-content{font-size:var(--message-text-size);margin:0;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;position:relative;width:100%}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{clear:both;content:".";display:block;height:0;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;height:0;width:4rem}.chat-box .timestamp{color:var(--clr-bubble-timestamp-text);float:right;font-size:80%;position:relative;top:.35rem;user-select:none;white-space:nowrap}.chat-box .author{color:var(--clr-bubble-author-text);font-size:80%;max-width:12em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.image-preview,.inline-image{border-radius:.1rem;overflow:hidden;position:relative}.inline-image{max-height:24rem;max-width:36rem}.inline-image>.rounded-container{border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent);bottom:2rem;margin:.25rem auto;position:relative}img.image-preview:before,img.inline-image:before{background:center no-repeat var(--clr-border-light) url(../img/broken_image.png);color:var(--clr-text-primary);display:flex;font-size:.9rem;font-weight:lighter;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}img.inline-image:before{background-size:3rem 3rem;content:attr(alt)}img.image-preview:before{background-size:10rem 10rem;content:" "}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{align-items:center;display:flex;justify-content:center;position:relative}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{background-color:hsla(0,0%,100%,.5);border-radius:.3rem;bottom:.25rem;color:var(--clr-toast-bg);font-size:80%;left:.25rem;padding:.25rem .5rem;position:absolute}.inline-video .play-control{align-items:center;background-color:rgba(0,0,0,.4);border-radius:50%;cursor:pointer;display:flex;height:4rem;justify-content:center;pointer-events:none;position:absolute;width:4rem}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{display:flex;flex-direction:column;height:100%;overflow-y:hidden;position:relative}#group-manager-buttons{background-color:var(--clr-background-blue-gray-50);border-left:1px solid var(--clr-border-light);box-shadow:0 -1px var(--clr-shadow-panel-divider);display:flex;height:4rem;justify-content:space-around;padding:.4rem;z-index:2}ul.tabbar{background:var(--clr-tabbar-bg);display:flex;flex-grow:0;flex-shrink:0;list-style:none;margin:0;overflow:hidden;padding:0 0 0 1rem;width:100%}ul.tabbar>li{box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button);height:2.4rem;position:relative}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{background:var(--clr-tabbar-inactive-border);bottom:0;content:"";height:.1rem;left:0;position:absolute;width:100%}ul.tabbar li.active:after{animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards;background:var(--clr-tabbar-active-border);bottom:0;content:"";height:.15rem;left:0;position:absolute}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{color:var(--clr-tabbar-inactive-text);font-size:1.3rem;font-variant:small-caps;font-weight:400;line-height:2.4rem;overflow:hidden;padding-left:1rem;padding-right:1rem;position:relative;text-align:center;text-decoration:none}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{background-color:var(--clr-secondary-accent);border-radius:50%;color:var(--clr-bright);display:inline-block;font-size:.75rem;font-weight:bolder;height:1.35rem;line-height:1.45rem;margin-left:.5rem;text-align:center;vertical-align:middle;width:1.35rem}.material-icons.as-badge{color:var(--clr-chip-remove-icon-bg);font-size:1.15rem;padding-left:.2rem}.badge{align-self:flex-start;background-color:var(--clr-badge-default-bg);border:1px solid var(--clr-badge-default-border);border-radius:.2rem;color:var(--clr-badge-default-text);display:inline-block;font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;margin:.05rem .1rem;padding:.05rem .25rem}.badge.green{background-color:var(--clr-badge-green-bg);border-color:var(--clr-badge-green-border);color:var(--clr-badge-green-text)}.badge.yellow{background-color:var(--clr-badge-yellow-bg);border-color:var(--clr-badge-yellow-border);color:var(--clr-badge-yellow-text)}.badge.blue{background-color:var(--clr-badge-blue-bg);border-color:var(--clr-badge-blue-border);color:var(--clr-badge-blue-text)}.badge.red{background-color:var(--clr-badge-red-bg);border-color:var(--clr-badge-red-border);color:var(--clr-badge-red-text)}.badge.magenta{background-color:var(--clr-badge-magenta-bg);border-color:var(--clr-badge-magenta-border);color:var(--clr-badge-magenta-text)}.lettertile{border-radius:50%;padding-bottom:100%;user-select:none;width:100%}.lettertile>div{align-items:center;border-radius:50%;bottom:0;color:var(--clr-lettertile-default-text);display:flex;flex-grow:0;flex-shrink:0;justify-content:center;left:0;line-height:1;padding-top:.1em;position:absolute;right:0;text-align:center;text-transform:uppercase;top:0}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;text-align:center;user-select:none;vertical-align:middle}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{font-size:85%;font-weight:700;left:39%;position:absolute;top:7%}.composed-material .second-small{font-size:62%;font-weight:700;left:30%;position:absolute;top:14%}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{border-radius:50%;color:var(--clr-lettertile-default-text);height:inherit;width:inherit}.chip-input{align-items:center;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);color:var(--clr-input-text);cursor:text;display:flex;flex-grow:1;flex-wrap:wrap;font-size:1.1rem;font-weight:400;justify-content:flex-start;margin:.25rem 0;max-height:10rem;min-height:4rem;outline:none;overflow-y:scroll;text-align:center;transition:all .1s ease-in-out}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{border:none;box-shadow:none;display:inline-block;flex:1 0 auto;min-width:4rem;width:auto}.chip,.chip-input>input[type=text]{height:1.8rem;line-height:1.8;margin:.125rem}.chip{align-items:center;background-color:var(--clr-chip-bg);border-radius:.9rem;display:flex;flex:0 0 auto;font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{text-overflow:ellipsis;white-space:nowrap}.chip>span{overflow-x:hidden}.chip.invalid{background-color:var(--clr-chip-invalid-bg);color:var(--clr-chip-invalid-text)}.chip>a{background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;color:var(--clr-chip-remove-icon-text);display:inline-block;height:1.175rem;line-height:1.15;margin:.3rem;min-width:1.175rem;text-decoration:none;width:1.175rem}.chip>a:focus,.chip>a:hover{background-color:var(--clr-chip-remove-icon-hover-bg);color:var(--clr-chip-remove-icon-hover-text);text-decoration:none}.chip .avatar-box{font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;position:relative;width:1.8rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;height:1.175rem;margin:.3rem;width:.25rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;background-color:var(--clr-bright);border-radius:50%;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);height:var(--size-small);left:0;margin-left:auto;margin-right:auto;padding:.25rem;position:absolute;right:0;top:5rem;width:var(--size-small);z-index:2}.load-spinner-box.large{height:var(--size-large);width:var(--size-large)}.load-spinner-box.clear{background-color:hsla(0,0%,100%,.5);box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{animation:spin 1.5s linear infinite;border-radius:50%;border-top:.35rem solid var(--clr-spinner-track);border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);height:2rem;width:2rem}.load-spinner-box.large .loader-spinner{height:3.5rem;width:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{background-color:var(--clr-background-blue-gray-100);border-radius:.1rem;height:.6rem;line-height:0;margin:.35rem;padding:.15rem;position:relative;width:6rem}.uploader>div>span{background-color:var(--clr-primary-action);border-radius:.08rem;display:inline-block;height:.3rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{align-self:center;height:21rem;margin:1rem auto auto;transform:translateZ(0)}.cropper,.cropper .bounding-box{border-radius:.25rem;position:relative;width:18rem}.cropper .bounding-box{background-color:var(--clr-cropper-bounding-box-bg);border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);height:18rem;overflow:hidden;z-index:1}.cropper .preview{max-height:none;max-width:none;position:absolute;z-index:-1}.cropper .cutout{border:1px dashed var(--clr-cropper-cutout-border);bottom:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);height:17.8rem;left:0;margin:auto;position:absolute;right:0;top:0;width:17.8rem;z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{cursor:move;position:absolute;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;margin:1rem auto;text-align:center;width:80%}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{border-left:.25rem solid var(--clr-reply-quote-border);border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer;font-weight:lighter;line-height:1.5em;padding:.15rem .5rem .25rem;position:relative}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{margin-bottom:.1rem;vertical-align:middle}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{align-items:center;display:flex}#reply-quote-preview .reply-quote{background-color:var(--clr-reply-quote-preview-bg);cursor:auto;margin:.35rem .5rem 0 0;width:100%}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:80%;margin:auto 1rem;overflow:hidden;padding:.5rem;position:relative;width:24rem}.forward-dialog .scrollable-panel{height:80%}.audio{align-items:center;background-color:var(--clr-audio-bg);border-radius:1.5rem;display:flex;flex:none;height:3rem;margin-left:auto}.audio canvas{height:2.6rem;margin-right:2rem;width:14rem}.audio canvas.playback{margin-right:0}.audio .duration{font-size:large}.audio-player{align-items:center;display:flex}.audio-player .material-icons.large{color:var(--clr-audio-icon);font-size:2.4rem}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{height:2.6rem;width:14rem}.audio-player canvas.playback{display:block}.audio-player div.playback{align-items:center;color:var(--clr-audio-icon);display:flex;font-size:small;justify-content:center}.audio-player .timer{color:var(--clr-audio-timer-text);font-size:smaller}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{align-items:center;display:flex;height:100%;position:relative}.pinned{background-color:var(--clr-background-off-white);background-position:50%;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);cursor:pointer;font-weight:lighter;min-width:0;padding:.15rem .5rem .25rem;transition:background .4s;width:24rem}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{align-items:center;background-color:var(--clr-background-extra-light-gray);border-radius:.25rem 0 0 .25rem;display:flex;flex-direction:column;height:100%;justify-content:space-evenly;margin-left:.35rem;padding:.2rem;position:relative;user-select:none}.pinned-scroll .dot{background-color:var(--clr-text-tertiary);border-radius:50%;height:.3rem;user-select:none;width:.3rem}.pinned-scroll .adot{background-color:var(--clr-light-blue-accent);border-radius:50%;height:.45rem;user-select:none;width:.45rem}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;bottom:0;display:flex;flex-direction:column;justify-content:space-evenly;position:absolute;right:0;top:0}.pinned-menu .menuTrigger{position:relative;right:0}.contact-card{background-color:var(--clr-background-off-white);border-radius:.5rem;display:flex;flex-direction:column;min-width:14rem;position:relative}.contact-card .avatar-box{font-size:1rem;height:1.8rem;margin-bottom:0;margin-right:.75rem;position:relative;width:1.8rem}.contact-card .contact-body{align-items:center;background-color:var(--clr-background-blue-gray-50);border-bottom:none;border-radius:.5rem .5rem 0 0;display:flex;padding:.75rem}.contact-card .contact-body .name-box{display:flex;flex-direction:column;overflow:hidden}.contact-card .contact-body .name-box .name{color:var(--clr-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-body .name-box .org{color:var(--clr-text-secondary);font-size:90%;font-weight:300;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-actions{align-items:center;background-color:var(--clr-bright);border-radius:0 0 .5rem .5rem;border-top:none;display:flex;justify-content:space-evenly;padding:0 .5rem}.contact-card .contact-actions a{cursor:pointer}.contact-card .contact-actions .divider{height:1.8rem;opacity:.5}.drag-n-drop{align-items:center;background-color:var(--clr-drag-n-drop-bg);border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;bottom:1.5rem;color:var(--clr-drag-n-drop-text);display:flex;font-size:2rem;justify-content:center;left:1.5rem;outline:.5rem solid var(--clr-drag-n-drop-outline);position:absolute;right:1.5rem;top:1.5rem;z-index:3}.country-flag{display:inline-block;font-size:larger}.dial-code{cursor:pointer;display:inline-block;margin-bottom:.15rem;vertical-align:middle;white-space:nowrap}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{cursor:pointer;font-weight:lighter;padding:.25rem .5rem .15rem;position:relative;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{color:var(--clr-primary-action);font-weight:400;position:absolute;right:.5rem}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{overflow-x:hidden;text-overflow:ellipsis}.image-grid{display:grid;gap:.35rem;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));padding:.25rem;position:relative}.image-grid-cell{border:1.5px solid transparent;border-radius:.25rem;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset);cursor:pointer;height:7rem;margin:0;overflow:hidden;padding:0;width:100%}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{align-items:center;background-color:var(--clr-toast-bg);border-radius:.5rem;bottom:2rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);color:var(--clr-toast-text);display:flex;font-weight:lighter;height:3rem;justify-content:center;left:50%;min-width:10rem;padding:.5rem 1rem;position:absolute;translate:-50%;visibility:hidden;z-index:3}div.toast.show{animation:fadein .5s,fadeout .5s 2.5s;visibility:visible}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{border-radius:0;box-shadow:none;width:100%}#info-view,#sidepanel{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized{border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong);flex-direction:row;height:11rem;left:0;top:var(--caption-panel-height);width:100%}#controls.minimized{bottom:auto;column-gap:unset;flex-direction:column;right:1rem;row-gap:.5rem}.minimized .call-party{border-radius:unset;box-shadow:unset}.call-party.self{border-radius:unset;bottom:8.5rem}} \ No newline at end of file diff --git a/umd/330.prod.js.map b/umd/330.prod.js.map index d757eb0c..09a10b6e 100644 --- a/umd/330.prod.js.map +++ b/umd/330.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"330.prod.js","mappings":"iHAGA,KAAgB,GAAK,QAAQ,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,UAAU,GAAK,WAAW,GAAK,UAAU,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,UAAU,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,QAAQ,GAAK,YAAY,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,QAAQ,GAAK,UAAU,GAAK,SAAS,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,SAAS,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,SAAS,GAAK,WAAW,GAAK,SAAS,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,SAAS,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,QAAQ,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,OAAO,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,OAAO,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,SAAS,GAAK,UAA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/examples.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeState.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js"],"sourcesContent":["// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"470123456\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"0195123456\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"34412345\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"60123456\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"2221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string` — The exact country of the phone number, if it could be determined.\n// When inputting a phone number in \"international\" format, it will derive the `country` from \"country calling code\" and the phone number digits.\n// When inputting a phone number in \"national\" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.\n// Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for \"non-geographic phone numbers\" `state.country` would've been \"001\".\n// * `callingCode?: string` — \"Country calling code\" that has been extracted from the input phone number.\n// When inputting a phone number in \"international\" format, it will extract the \"country calling code\" from the digits that follow the \"+\" character.\n// When inputting a phone number in \"national\" format, `callingCode` will be `undefined`.\n// Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in \"international\" format.\n// * `digits: string` — Phone number digits that have been input so far, including the \"+\" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.\n// * `international: boolean` — Whether the phone number is being input in \"international\" format, i.e. with a \"+\" character.\n// * `missingPlus: boolean` — Whether it's a phone number in \"international\" format that is missing the leading \"+\" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.\n// * `IDDPrefix?: string` — An \"IDD prefix\", when the phone number is being input in an \"out-of-country dialing\" format. https://wikitravel.org/en/International_dialling_prefix\n// * `carrierCode?: string` — A \"carrier code\", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.\n// * `nationalPrefix?: string` — \"National prefix\", if present in the phone number input.\n// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.\n// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting \"0343515551212999\" Argentinian mobile number, the parsed national (significant) number is \"93435551212999\". There, one can see how it stripped \"0\" national prefix and prepended a \"9\", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's \"modified\" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a \"national prefix\" but rather some other type of \"utility\" prefix.\n// For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.\n// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n function AsYouTypeState(_ref) {\n var onCountryChange = _ref.onCountryChange,\n onCallingCodeChange = _ref.onCallingCodeChange;\n _classCallCheck(this, AsYouTypeState);\n this.onCountryChange = onCountryChange;\n this.onCallingCodeChange = onCallingCodeChange;\n }\n return _createClass(AsYouTypeState, [{\n key: \"reset\",\n value: function reset(_ref2) {\n var country = _ref2.country,\n callingCode = _ref2.callingCode;\n this.international = false;\n this.missingPlus = false;\n this.IDDPrefix = undefined;\n this.callingCode = undefined;\n this.digits = '';\n this.resetNationalSignificantNumber();\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"resetNationalSignificantNumber\",\n value: function resetNationalSignificantNumber() {\n this.nationalSignificantNumber = this.getNationalDigits();\n this.nationalSignificantNumberIsModified = false;\n this.nationalPrefix = undefined;\n this.carrierCode = undefined;\n this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = undefined;\n }\n }, {\n key: \"update\",\n value: function update(properties) {\n for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n this[key] = properties[key];\n }\n }\n }, {\n key: \"initCountryAndCallingCode\",\n value: function initCountryAndCallingCode(country, callingCode) {\n this.setCountry(country);\n this.setCallingCode(callingCode);\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(country) {\n this.country = country;\n this.onCountryChange(country);\n }\n }, {\n key: \"setCallingCode\",\n value: function setCallingCode(callingCode) {\n this.callingCode = callingCode;\n this.onCallingCodeChange(callingCode, this.country);\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(country, callingCode) {\n // Prepend the `+` to parsed input.\n this.international = true;\n // If a default country was set then reset it\n // because an explicitly international phone\n // number is being entered.\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"appendDigits\",\n value: function appendDigits(nextDigits) {\n this.digits += nextDigits;\n }\n }, {\n key: \"appendNationalSignificantNumberDigits\",\n value: function appendNationalSignificantNumberDigits(nextDigits) {\n this.nationalSignificantNumber += nextDigits;\n }\n\n /**\r\n * Returns the part of `this.digits` that corresponds to the national number.\r\n * Basically, all digits that have been input by the user, except for the\r\n * international prefix and the country calling code part\r\n * (if the number is an international one).\r\n * @return {string}\r\n */\n }, {\n key: \"getNationalDigits\",\n value: function getNationalDigits() {\n if (this.international) {\n return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));\n }\n return this.digits;\n }\n }, {\n key: \"getDigitsWithoutInternationalPrefix\",\n value: function getDigitsWithoutInternationalPrefix() {\n if (this.international) {\n if (this.IDDPrefix) {\n return this.digits.slice(this.IDDPrefix.length);\n }\n }\n return this.digits;\n }\n }]);\n}();\nexport { AsYouTypeState as default };\n//# sourceMappingURL=AsYouTypeState.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nexport function countOccurences(symbol, string) {\n var count = 0;\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for counting brackets it is safe.\n // for (const character of string)\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n if (character === symbol) {\n count++;\n }\n }\n return count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n if (times < 1) {\n return '';\n }\n var result = '';\n while (times > 1) {\n if (times & 1) {\n result += string;\n }\n times >>= 1;\n string += string;\n }\n return result + string;\n}\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\n if (string[cutBeforeIndex] === ')') {\n cutBeforeIndex++;\n }\n return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nexport function closeNonPairedParens(template, cut_before) {\n var retained_template = template.slice(0, cut_before);\n var opening_braces = countOccurences('(', retained_template);\n var closing_braces = countOccurences(')', retained_template);\n var dangling_braces = opening_braces - closing_braces;\n while (dangling_braces > 0 && cut_before < template.length) {\n if (template[cut_before] === ')') {\n dangling_braces--;\n }\n cut_before++;\n }\n return template.slice(0, cut_before);\n}\nexport function stripNonPairedParens(string) {\n var dangling_braces = [];\n var i = 0;\n while (i < string.length) {\n if (string[i] === '(') {\n dangling_braces.push(i);\n } else if (string[i] === ')') {\n dangling_braces.pop();\n }\n i++;\n }\n var start = 0;\n var cleared_string = '';\n dangling_braces.push(string.length);\n for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {\n var index = _dangling_braces[_i];\n cleared_string += string.slice(start, index);\n start = index + 1;\n }\n return cleared_string;\n}\nexport function populateTemplateWithDigits(template, position, digits) {\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for `digits` it is safe.\n // for (const digit of digits)\n for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {\n var digit = _step2.value;\n // If there is room for more digits in current `template`,\n // then set the next digit in the `template`,\n // and return the formatted digits so far.\n // If more digits are entered than the current format could handle.\n if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\n return;\n }\n position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n }\n return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map","import checkNumberLength from './helpers/checkNumberLength.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nexport default function formatCompleteNumber(state, format, _ref) {\n var metadata = _ref.metadata,\n shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;\n var matcher = new RegExp(\"^(?:\".concat(format.pattern(), \")$\"));\n if (matcher.test(state.nationalSignificantNumber)) {\n return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n metadata: metadata,\n shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n });\n }\n}\nexport function canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {\n return checkNumberLength(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';\n}\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {\n var metadata = _ref2.metadata,\n shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;\n // `format` has already been checked for `nationalPrefix` requirement.\n\n var nationalSignificantNumber = state.nationalSignificantNumber,\n international = state.international,\n nationalPrefix = state.nationalPrefix,\n carrierCode = state.carrierCode;\n\n // Format the number with using `national_prefix_formatting_rule`.\n // If the resulting formatted number is a valid formatted number, then return it.\n //\n // Google's AsYouType formatter is different in a way that it doesn't try\n // to format using the \"national prefix formatting rule\", and instead it\n // simply prepends a national prefix followed by a \" \" character.\n // This code does that too, but as a fallback.\n // The reason is that \"national prefix formatting rule\" may use parentheses,\n // which wouldn't be included has it used the simpler Google's way.\n //\n if (shouldTryNationalPrefixFormattingRule(format)) {\n var formattedNumber = formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: true,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n if (formattedNumber) {\n return formattedNumber;\n }\n }\n\n // Format the number without using `national_prefix_formatting_rule`.\n return formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: false,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n}\nfunction formatNationalNumber(state, format, _ref3) {\n var metadata = _ref3.metadata,\n useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n var formattedNationalNumber = formatNationalNumberUsingFormat(state.nationalSignificantNumber, format, {\n carrierCode: state.carrierCode,\n useInternationalFormat: state.international,\n withNationalPrefix: useNationalPrefixFormattingRule,\n metadata: metadata\n });\n if (!useNationalPrefixFormattingRule) {\n if (state.nationalPrefix) {\n // If a national prefix was extracted, then just prepend it,\n // followed by a \" \" character.\n formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;\n } else if (state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;\n }\n }\n if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n return formattedNationalNumber;\n }\n}\n\n// Check that the formatted phone number contains exactly\n// the same digits that have been input by the user.\n// For example, when \"0111523456789\" is input for `AR` country,\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\n// which means that the national part of `this.digits` isn't simply equal to\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\n//\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\n// being formatted via `metadata[country].national_prefix_transform_rule`.\n// For example, for `VI` country, it prepends `340` to the national number,\n// and if this check hasn't been implemented, then there would be a bug\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\n//\n// So, all these \"gotchas\" are filtered out.\n//\n// In the original Google's code, the comments say:\n// \"Check that we didn't remove nor add any extra digits when we matched\n// this formatting pattern. This usually happens after we entered the last\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\n// formatted but AYTF should retain all the number entered and not change\n// in order to match a format (of same leading digits and length) display\n// in that way.\"\n// \"If it's the same (i.e entered number and format is same), then it's\n// safe to return this in formatted number as nothing is lost / added.\"\n// Otherwise, don't use this format.\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\n//\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n return parseDigits(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar PatternParser = /*#__PURE__*/function () {\n function PatternParser() {\n _classCallCheck(this, PatternParser);\n }\n return _createClass(PatternParser, [{\n key: \"parse\",\n value: function parse(pattern) {\n this.context = [{\n or: true,\n instructions: []\n }];\n this.parsePattern(pattern);\n if (this.context.length !== 1) {\n throw new Error('Non-finalized contexts left when pattern parse ended');\n }\n var _this$context$ = this.context[0],\n branches = _this$context$.branches,\n instructions = _this$context$.instructions;\n if (branches) {\n return {\n op: '|',\n args: branches.concat([expandSingleElementArray(instructions)])\n };\n }\n\n /* istanbul ignore if */\n if (instructions.length === 0) {\n throw new Error('Pattern is required');\n }\n if (instructions.length === 1) {\n return instructions[0];\n }\n return instructions;\n }\n }, {\n key: \"startContext\",\n value: function startContext(context) {\n this.context.push(context);\n }\n }, {\n key: \"endContext\",\n value: function endContext() {\n this.context.pop();\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context[this.context.length - 1];\n }\n }, {\n key: \"parsePattern\",\n value: function parsePattern(pattern) {\n if (!pattern) {\n throw new Error('Pattern is required');\n }\n var match = pattern.match(OPERATOR);\n if (!match) {\n if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n }\n this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n return;\n }\n var operator = match[1];\n var before = pattern.slice(0, match.index);\n var rightPart = pattern.slice(match.index + operator.length);\n switch (operator) {\n case '(?:':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n or: true,\n instructions: [],\n branches: []\n });\n break;\n case ')':\n if (!this.getContext().or) {\n throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n }\n if (before) {\n this.parsePattern(before);\n }\n if (this.getContext().instructions.length === 0) {\n throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n }\n var _this$getContext = this.getContext(),\n branches = _this$getContext.branches;\n branches.push(expandSingleElementArray(this.getContext().instructions));\n this.endContext();\n this.getContext().instructions.push({\n op: '|',\n args: branches\n });\n break;\n case '|':\n if (!this.getContext().or) {\n throw new Error('\"|\" operator can only be used inside \"or\" groups');\n }\n if (before) {\n this.parsePattern(before);\n }\n // The top-level is an implicit \"or\" group, if required.\n if (!this.getContext().branches) {\n // `branches` are not defined only for the root implicit \"or\" operator.\n /* istanbul ignore else */\n if (this.context.length === 1) {\n this.getContext().branches = [];\n } else {\n throw new Error('\"branches\" not found in an \"or\" group context');\n }\n }\n this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n this.getContext().instructions = [];\n break;\n case '[':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n oneOfSet: true\n });\n break;\n case ']':\n if (!this.getContext().oneOfSet) {\n throw new Error('\"]\" operator must be preceded by \"[\" operator');\n }\n this.endContext();\n this.getContext().instructions.push({\n op: '[]',\n args: parseOneOfSet(before)\n });\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unknown operator: \".concat(operator));\n }\n if (rightPart) {\n this.parsePattern(rightPart);\n }\n }\n }]);\n}();\nexport { PatternParser as default };\nfunction parseOneOfSet(pattern) {\n var values = [];\n var i = 0;\n while (i < pattern.length) {\n if (pattern[i] === '-') {\n if (i === 0 || i === pattern.length - 1) {\n throw new Error(\"Couldn't parse a one-of set pattern: \".concat(pattern));\n }\n var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n var value = prevValue;\n while (value <= nextValue) {\n values.push(String.fromCharCode(value));\n value++;\n }\n } else {\n values.push(pattern[i]);\n }\n i++;\n }\n return values;\n}\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp(\n// any of:\n'(' +\n// or operator\n'\\\\|' +\n// or\n'|' +\n// or group start\n'\\\\(\\\\?\\\\:' +\n// or\n'|' +\n// or group end\n'\\\\)' +\n// or\n'|' +\n// one-of set start\n'\\\\[' +\n// or\n'|' +\n// one-of set end\n'\\\\]' + ')');\nfunction expandSingleElementArray(array) {\n if (array.length === 1) {\n return array[0];\n }\n return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport PatternParser from './AsYouTypeFormatter.PatternParser.js';\nvar PatternMatcher = /*#__PURE__*/function () {\n function PatternMatcher(pattern) {\n _classCallCheck(this, PatternMatcher);\n this.matchTree = new PatternParser().parse(pattern);\n }\n return _createClass(PatternMatcher, [{\n key: \"match\",\n value: function match(string) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n allowOverflow = _ref.allowOverflow;\n if (!string) {\n throw new Error('String is required');\n }\n var result = _match(string.split(''), this.matchTree, true);\n if (result && result.match) {\n delete result.matchedChars;\n }\n if (result && result.overflow) {\n if (!allowOverflow) {\n return;\n }\n }\n return result;\n }\n }]);\n}();\n/**\r\n * Matches `characters` against a pattern compiled into a `tree`.\r\n * @param {string[]} characters\r\n * @param {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.\r\n * @param {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.\r\n * @return {object} See the `*.d.ts` file for the description of the result object.\r\n */\nexport { PatternMatcher as default };\nfunction _match(characters, tree, last) {\n // If `tree` is a string, then `tree` is a single character.\n // That's because when a pattern is parsed, multi-character-string parts\n // of a pattern are compiled into arrays of single characters.\n // I still wrote this piece of code for a \"general\" hypothetical case\n // when `tree` could be a string of several characters, even though\n // such case is not possible with the current implementation.\n if (typeof tree === 'string') {\n var characterString = characters.join('');\n if (tree.indexOf(characterString) === 0) {\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore else */\n if (characters.length === tree.length) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore next */\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n if (characterString.indexOf(tree) === 0) {\n if (last) {\n // The `else` path is not possible because `tree` is always a single character.\n // The `else` case for `characters.length > tree.length` would be\n // `characters.length <= tree.length` which means `characters.length <= 1`.\n // `characters` array can't be empty, so that means `characters === [tree]`,\n // which would also mean `tree.indexOf(characterString) === 0` and that'd mean\n // that the `if (tree.indexOf(characterString) === 0)` condition before this\n // `if` condition would be entered, and returned from there, not reaching this code.\n /* istanbul ignore else */\n if (characters.length > tree.length) {\n return {\n overflow: true\n };\n }\n }\n return {\n match: true,\n matchedChars: characters.slice(0, tree.length)\n };\n }\n return;\n }\n if (Array.isArray(tree)) {\n var restCharacters = characters.slice();\n var i = 0;\n while (i < tree.length) {\n var subtree = tree[i];\n var result = _match(restCharacters, subtree, last && i === tree.length - 1);\n if (!result) {\n return;\n } else if (result.overflow) {\n return result;\n } else if (result.match) {\n // Continue with the next subtree with the rest of the characters.\n restCharacters = restCharacters.slice(result.matchedChars.length);\n if (restCharacters.length === 0) {\n if (i === tree.length - 1) {\n return {\n match: true,\n matchedChars: characters\n };\n } else {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n }\n } else {\n /* istanbul ignore else */\n if (result.partialMatch) {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n }\n }\n i++;\n }\n // If `last` then overflow has already been checked\n // by the last element of the `tree` array.\n /* istanbul ignore if */\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: characters.slice(0, characters.length - restCharacters.length)\n };\n }\n switch (tree.op) {\n case '|':\n var partialMatch;\n for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n var branch = _step.value;\n var _result = _match(characters, branch, last);\n if (_result) {\n if (_result.overflow) {\n return _result;\n } else if (_result.match) {\n return {\n match: true,\n matchedChars: _result.matchedChars\n };\n } else {\n /* istanbul ignore else */\n if (_result.partialMatch) {\n partialMatch = true;\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(_result, null, 2)));\n }\n }\n }\n }\n if (partialMatch) {\n return {\n partialMatch: true\n // matchedChars: ...\n };\n }\n // Not even a partial match.\n return;\n case '[]':\n for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n var _char = _step2.value;\n if (characters[0] === _char) {\n if (characters.length === 1) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: [_char]\n };\n }\n }\n // No character matches.\n return;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unsupported instruction tree: \".concat(tree));\n }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DIGIT_PLACEHOLDER, countOccurences, repeat, cutAndStripNonPairedParens, closeNonPairedParens, stripNonPairedParens, populateTemplateWithDigits } from './AsYouTypeFormatter.util.js';\nimport formatCompleteNumber, { canFormatCompleteNumber } from './AsYouTypeFormatter.complete.js';\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher.js';\nimport parseDigits from './helpers/parseDigits.js';\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util.js';\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat.js';\nimport { VALID_PUNCTUATION } from './constants.js';\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle.js';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// A set of characters that, if found in a national prefix formatting rules, are an indicator to\n// us that we should separate the national prefix from the number when formatting.\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;\n\n// Deprecated: Google has removed some formatting pattern related code from their repo.\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\n// Because this library supports generating custom metadata\n// some users may still be using old metadata so the relevant\n// code seems to stay until some next major version update.\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true;\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\[([^\\[\\]])*\\]/g;\n};\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\d(?=[^,}][^,}])/g;\n};\n\n// A regular expression that is used to determine if a `format` is\n// suitable to be used in the \"as you type formatter\".\n// A `format` is suitable when the resulting formatted number has\n// the same digits as the user has entered.\n//\n// In the simplest case, that would mean that the format\n// doesn't add any additional digits when formatting a number.\n// Google says that it also shouldn't add \"star\" (`*`) characters,\n// like it does in some Israeli formats.\n// Such basic format would only contain \"valid punctuation\"\n// and \"captured group\" identifiers ($1, $2, etc).\n//\n// An example of a format that adds additional digits:\n//\n// Country: `AR` (Argentina).\n// Format:\n// {\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n// \"leading_digits_patterns\": [\"91\"],\n// \"national_prefix_formatting_rule\": \"0$1\",\n// \"format\": \"$2 15-$3-$4\",\n// \"international_format\": \"$1 $2 $3-$4\"\n// }\n//\n// In the format above, the `format` adds `15` to the digits when formatting a number.\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\n// has previously removed `15` from a national number, so re-adding `15` in `format`\n// doesn't actually result in any extra digits added to user's input.\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\n//\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\n// `libphonenumber` code.\n//\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + VALID_PUNCTUATION + ']*' +\n// Google developers say:\n// \"We require that the first matching group is present in the\n// output pattern to ensure no data is lost while formatting.\"\n'\\\\$1' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)*' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \"leading digits pattern\" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n function AsYouTypeFormatter(_ref) {\n var state = _ref.state,\n metadata = _ref.metadata;\n _classCallCheck(this, AsYouTypeFormatter);\n this.metadata = metadata;\n this.resetFormat();\n }\n return _createClass(AsYouTypeFormatter, [{\n key: \"resetFormat\",\n value: function resetFormat() {\n this.chosenFormat = undefined;\n this.template = undefined;\n this.nationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplatePosition = -1;\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan, state) {\n this.resetFormat();\n if (numberingPlan) {\n this.isNANP = numberingPlan.callingCode() === '1';\n this.matchingFormats = numberingPlan.formats();\n if (state.nationalSignificantNumber) {\n this.narrowDownMatchingFormats(state);\n }\n } else {\n this.isNANP = undefined;\n this.matchingFormats = [];\n }\n }\n\n /**\r\n * Formats an updated phone number.\r\n * @param {string} nextDigits — Additional phone number digits.\r\n * @param {object} state — `AsYouType` state.\r\n * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n */\n }, {\n key: \"format\",\n value: function format(nextDigits, state) {\n var _this = this;\n // See if the phone number digits can be formatted as a complete phone number.\n // If not, use the results from `formatNationalNumberWithNextDigits()`,\n // which formats based on the chosen formatting pattern.\n //\n // Attempting to format complete phone number first is how it's done\n // in Google's `libphonenumber`, so this library just follows it.\n // Google's `libphonenumber` code doesn't explain in detail why does it\n // attempt to format digits as a complete phone number\n // instead of just going with a previoulsy (or newly) chosen `format`:\n //\n // \"Checks to see if there is an exact pattern match for these digits.\n // If so, we should use this instead of any other formatting template\n // whose leadingDigitsPattern also matches the input.\"\n //\n if (canFormatCompleteNumber(state.nationalSignificantNumber, state.country, this.metadata)) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n var _format = _step.value;\n var formattedCompleteNumber = formatCompleteNumber(state, _format, {\n metadata: this.metadata,\n shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {\n return _this.shouldTryNationalPrefixFormattingRule(format, {\n international: state.international,\n nationalPrefix: state.nationalPrefix\n });\n },\n getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {\n return _this.getSeparatorAfterNationalPrefix(format);\n }\n });\n if (formattedCompleteNumber) {\n this.resetFormat();\n this.chosenFormat = _format;\n this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state);\n this.populatedNationalNumberTemplate = formattedCompleteNumber;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER);\n return formattedCompleteNumber;\n }\n }\n }\n // Format the digits as a partial (incomplete) phone number\n // using the previously chosen formatting pattern (or a newly chosen one).\n return this.formatNationalNumberWithNextDigits(nextDigits, state);\n }\n\n // Formats the next phone number digits.\n }, {\n key: \"formatNationalNumberWithNextDigits\",\n value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n var previouslyChosenFormat = this.chosenFormat;\n\n // Choose a format from the list of matching ones.\n var newlyChosenFormat = this.chooseFormat(state);\n if (newlyChosenFormat) {\n if (newlyChosenFormat === previouslyChosenFormat) {\n // If it can format the next (current) digits\n // using the previously chosen phone number format\n // then return the updated formatted number.\n return this.formatNextNationalNumberDigits(nextDigits);\n } else {\n // If a more appropriate phone number format\n // has been chosen for these \"leading digits\",\n // then re-format the national phone number part\n // using the newly selected format.\n return this.formatNextNationalNumberDigits(state.getNationalDigits());\n }\n }\n }\n }, {\n key: \"narrowDownMatchingFormats\",\n value: function narrowDownMatchingFormats(_ref2) {\n var _this2 = this;\n var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n nationalPrefix = _ref2.nationalPrefix,\n international = _ref2.international;\n var leadingDigits = nationalSignificantNumber;\n\n // \"leading digits\" pattern list starts with a\n // \"leading digits\" pattern fitting a maximum of 3 leading digits.\n // So, after a user inputs 3 digits of a national (significant) phone number\n // this national (significant) number can already be formatted.\n // The next \"leading digits\" pattern is for 4 leading digits max,\n // and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\n\n // This implementation is different from Google's\n // in that it searches for a fitting format\n // even if the user has entered less than\n // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\n // Because some leading digit patterns already match for a single first digit.\n var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n if (leadingDigitsPatternIndex < 0) {\n leadingDigitsPatternIndex = 0;\n }\n this.matchingFormats = this.matchingFormats.filter(function (format) {\n return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n });\n\n // If there was a phone number format chosen\n // and it no longer holds given the new leading digits then reset it.\n // The test for this `if` condition is marked as:\n // \"Reset a chosen format when it no longer holds given the new leading digits\".\n // To construct a valid test case for this one can find a country\n // in `PhoneNumberMetadata.xml` yielding one format for 3 ``\n // and yielding another format for 4 `` (Australia in this case).\n if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\n this.resetFormat();\n }\n }\n }, {\n key: \"formatSuits\",\n value: function formatSuits(format, international, nationalPrefix) {\n // When a prefix before a national (significant) number is\n // simply a national prefix, then it's parsed as `this.nationalPrefix`.\n // In more complex cases, a prefix before national (significant) number\n // could include a national prefix as well as some \"capturing groups\",\n // and in that case there's no info whether a national prefix has been parsed.\n // If national prefix is not used when formatting a phone number\n // using this format, but a national prefix has been entered by the user,\n // and was extracted, then discard such phone number format.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\n if (nationalPrefix && !format.usesNationalPrefix() &&\n // !format.domesticCarrierCodeFormattingRule() &&\n !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n return false;\n }\n // If national prefix is mandatory for this phone number format\n // and there're no guarantees that a national prefix is present in user input\n // then discard this phone number format as not suitable.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\n if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n return false;\n }\n return true;\n }\n }, {\n key: \"formatMatches\",\n value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;\n\n // If this format is not restricted to a certain\n // leading digits pattern then it fits.\n // The test case could be found by searching for \"leadingDigitsPatternsCount === 0\".\n if (leadingDigitsPatternsCount === 0) {\n return true;\n }\n\n // Start narrowing down the list of possible formats based on the leading digits.\n // (only previously matched formats take part in the narrowing down process)\n\n // `leading_digits_patterns` start with 3 digits min\n // and then go up from there one digit at a time.\n leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];\n\n // Google imposes a requirement on the leading digits\n // to be minimum 3 digits long in order to be eligible\n // for checking those with a leading digits pattern.\n //\n // Since `leading_digits_patterns` start with 3 digits min,\n // Google's original `libphonenumber` library only starts\n // excluding any non-matching formats only when the\n // national number entered so far is at least 3 digits long,\n // otherwise format matching would give false negatives.\n //\n // For example, when the digits entered so far are `2`\n // and the leading digits pattern is `21` –\n // it's quite obvious in this case that the format could be the one\n // but due to the absence of further digits it would give false negative.\n //\n // Also, `leading_digits_patterns` doesn't always correspond to a single\n // digits count. For example, `60|8` pattern would already match `8`\n // but the `60` part would require having at least two leading digits,\n // so the whole pattern would require inputting two digits first in order to\n // decide on whether it matches the input, even when the input is \"80\".\n //\n // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\n // even when there's only 1 or 2 digits of the national (significant) number.\n // To do that, it uses a non-strict pattern matcher written specifically for that.\n //\n if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\n // Before leading digits < 3 matching was implemented:\n // return true\n //\n // After leading digits < 3 matching was implemented:\n try {\n return new PatternMatcher(leadingDigitsPattern).match(leadingDigits, {\n allowOverflow: true\n }) !== undefined;\n } catch (error) /* istanbul ignore next */{\n // There's a slight possibility that there could be some undiscovered bug\n // in the pattern matcher code. Since the \"leading digits < 3 matching\"\n // feature is not \"essential\" for operation, it can fall back to the old way\n // in case of any issues rather than halting the application's execution.\n console.error(error);\n return true;\n }\n }\n\n // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\n // available then use the usual regular expression matching.\n //\n // The whole pattern is wrapped in round brackets (`()`) because\n // the pattern can use \"or\" operator (`|`) at the top level of the pattern.\n //\n return new RegExp(\"^(\".concat(leadingDigitsPattern, \")\")).test(leadingDigits);\n }\n }, {\n key: \"getFormatFormat\",\n value: function getFormatFormat(format, international) {\n return international ? format.internationalFormat() : format.format();\n }\n }, {\n key: \"chooseFormat\",\n value: function chooseFormat(state) {\n var _this3 = this;\n var _loop = function _loop() {\n var format = _step2.value;\n // If this format is currently being used\n // and is still suitable, then stick to it.\n if (_this3.chosenFormat === format) {\n return 0; // break\n }\n // Sometimes, a formatting rule inserts additional digits in a phone number,\n // and \"as you type\" formatter can't do that: it should only use the digits\n // that the user has input.\n //\n // For example, in Argentina, there's a format for mobile phone numbers:\n //\n // {\n // \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n // \"leading_digits_patterns\": [\"91\"],\n // \"national_prefix_formatting_rule\": \"0$1\",\n // \"format\": \"$2 15-$3-$4\",\n // \"international_format\": \"$1 $2 $3-$4\"\n // }\n //\n // In that format, `international_format` is used instead of `format`\n // because `format` inserts `15` in the formatted number,\n // and `AsYouType` formatter should only use the digits\n // the user has actually input, without adding any extra digits.\n // In this case, it wouldn't make a difference, because the `15`\n // is first stripped when applying `national_prefix_for_parsing`\n // and then re-added when using `format`, so in reality it doesn't\n // add any new digits to the number, but to detect that, the code\n // would have to be more complex: it would have to try formatting\n // the digits using the format and then see if any digits have\n // actually been added or removed, and then, every time a new digit\n // is input, it should re-check whether the chosen format doesn't\n // alter the digits.\n //\n // Google's code doesn't go that far, and so does this library:\n // it simply requires that a `format` doesn't add any additonal\n // digits to user's input.\n //\n // Also, people in general should move from inputting phone numbers\n // in national format (possibly with national prefixes)\n // and use international phone number format instead:\n // it's a logical thing in the modern age of mobile phones,\n // globalization and the internet.\n //\n /* istanbul ignore if */\n if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n return 1; // continue\n }\n if (!_this3.createTemplateForFormat(format, state)) {\n // Remove the format if it can't generate a template.\n _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {\n return _ !== format;\n });\n return 1; // continue\n }\n _this3.chosenFormat = format;\n return 0; // break\n },\n _ret;\n // When there are multiple available formats, the formatter uses the first\n // format where a formatting template could be created.\n //\n // For some weird reason, `istanbul` says \"else path not taken\"\n // for the `for of` line below. Supposedly that means that\n // the loop doesn't ever go over the last element in the list.\n // That's true because there always is `this.chosenFormat`\n // when `this.matchingFormats` is non-empty.\n // And, for some weird reason, it doesn't think that the case\n // with empty `this.matchingFormats` qualifies for a valid \"else\" path.\n // So simply muting this `istanbul` warning.\n // It doesn't skip the contents of the `for of` loop,\n // it just skips the `for of` line.\n //\n /* istanbul ignore next */\n for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n _ret = _loop();\n if (_ret === 0) break;\n if (_ret === 1) continue;\n }\n if (!this.chosenFormat) {\n // No format matches the national (significant) phone number.\n this.resetFormat();\n }\n return this.chosenFormat;\n }\n }, {\n key: \"createTemplateForFormat\",\n value: function createTemplateForFormat(format, state) {\n // The formatter doesn't format numbers when numberPattern contains '|', e.g.\n // (20|3)\\d{4}. In those cases we quickly return.\n // (Though there's no such format in current metadata)\n /* istanbul ignore if */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n return;\n }\n // Get formatting template for this phone number format\n var template = this.getTemplateForFormat(format, state);\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (template) {\n this.setNationalNumberTemplate(template, state);\n return true;\n }\n }\n }, {\n key: \"getSeparatorAfterNationalPrefix\",\n value: function getSeparatorAfterNationalPrefix(format) {\n // `US` metadata doesn't have a `national_prefix_formatting_rule`,\n // so the `if` condition below doesn't apply to `US`,\n // but in reality there shoudl be a separator\n // between a national prefix and a national (significant) number.\n // So `US` national prefix separator is a \"special\" \"hardcoded\" case.\n if (this.isNANP) {\n return ' ';\n }\n // If a `format` has a `national_prefix_formatting_rule`\n // and that rule has a separator after a national prefix,\n // then it means that there should be a separator\n // between a national prefix and a national (significant) number.\n if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n return ' ';\n }\n // At this point, there seems to be no clear evidence that\n // there should be a separator between a national prefix\n // and a national (significant) number. So don't insert one.\n return '';\n }\n }, {\n key: \"getInternationalPrefixBeforeCountryCallingCode\",\n value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n var IDDPrefix = _ref3.IDDPrefix,\n missingPlus = _ref3.missingPlus;\n if (IDDPrefix) {\n return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n }\n if (missingPlus) {\n return '';\n }\n return '+';\n }\n }, {\n key: \"getTemplate\",\n value: function getTemplate(state) {\n if (!this.template) {\n return;\n }\n // `this.template` holds the template for a \"complete\" phone number.\n // The currently entered phone number is most likely not \"complete\",\n // so trim all non-populated digits.\n var index = -1;\n var i = 0;\n var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n spacing: false\n }) : '';\n while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n index = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1);\n i++;\n }\n return cutAndStripNonPairedParens(this.template, index + 1);\n }\n }, {\n key: \"setNationalNumberTemplate\",\n value: function setNationalNumberTemplate(template, state) {\n this.nationalNumberTemplate = template;\n this.populatedNationalNumberTemplate = template;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = -1;\n // For convenience, the public `.template` property\n // contains the whole international number\n // if the phone number being input is international:\n // 'x' for the '+' sign, 'x'es for the country phone code,\n // a spacebar and then the template for the formatted national number.\n if (state.international) {\n this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) + repeat(DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n } else {\n this.template = template;\n }\n }\n\n /**\r\n * Generates formatting template for a national phone number,\r\n * optionally containing a national prefix, for a format.\r\n * @param {Format} format\r\n * @param {string} nationalPrefix\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplateForFormat\",\n value: function getTemplateForFormat(format, _ref4) {\n var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n international = _ref4.international,\n nationalPrefix = _ref4.nationalPrefix,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n var pattern = format.pattern();\n\n /* istanbul ignore else */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n pattern = pattern\n // Replace anything in the form of [..] with \\d\n .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\n // Replace any standalone digit (not the one in `{}`) with \\d\n .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n }\n\n // Generate a dummy national number (consisting of `9`s)\n // that fits this format's `pattern`.\n //\n // This match will always succeed,\n // because the \"longest dummy phone number\"\n // has enough length to accomodate any possible\n // national phone number format pattern.\n //\n var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];\n\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (nationalSignificantNumber.length > digits.length) {\n return;\n }\n\n // Get a formatting template which can be used to efficiently format\n // a partial number where digits are added one by one.\n\n // Below `strictPattern` is used for the\n // regular expression (with `^` and `$`).\n // This wasn't originally in Google's `libphonenumber`\n // and I guess they don't really need it\n // because they're not using \"templates\" to format phone numbers\n // but I added `strictPattern` after encountering\n // South Korean phone number formatting bug.\n //\n // Non-strict regular expression bug demonstration:\n //\n // this.nationalSignificantNumber : `111111111` (9 digits)\n //\n // pattern : (\\d{2})(\\d{3,4})(\\d{4})\n // format : `$1 $2 $3`\n // digits : `9999999999` (10 digits)\n //\n // '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\n //\n // template : xx xxxx xxxx\n //\n // But the correct template in this case is `xx xxx xxxx`.\n // The template was generated incorrectly because of the\n // `{3,4}` variability in the `pattern`.\n //\n // The fix is, if `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then `this.nationalSignificantNumber`\n // is used instead of `digits`.\n\n var strictPattern = new RegExp('^' + pattern + '$');\n var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT);\n\n // If `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then use it\n // instead of `digits`.\n if (strictPattern.test(nationalNumberDummyDigits)) {\n digits = nationalNumberDummyDigits;\n }\n var numberFormat = this.getFormatFormat(format, international);\n var nationalPrefixIncludedInTemplate;\n\n // If a user did input a national prefix (and that's guaranteed),\n // and if a `format` does have a national prefix formatting rule,\n // then see if that national prefix formatting rule\n // prepends exactly the same national prefix the user has input.\n // If that's the case, then use the `format` with the national prefix formatting rule.\n // Otherwise, use the `format` without the national prefix formatting rule,\n // and prepend a national prefix manually to it.\n if (this.shouldTryNationalPrefixFormattingRule(format, {\n international: international,\n nationalPrefix: nationalPrefix\n })) {\n var numberFormatWithNationalPrefix = numberFormat.replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n // If `national_prefix_formatting_rule` of a `format` simply prepends\n // national prefix at the start of a national (significant) number,\n // then such formatting can be used with `AsYouType` formatter.\n // There seems to be no `else` case: everywhere in metadata,\n // national prefix formatting rule is national prefix + $1,\n // or `($1)`, in which case such format isn't even considered\n // when the user has input a national prefix.\n /* istanbul ignore else */\n if (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\n numberFormat = numberFormatWithNationalPrefix;\n nationalPrefixIncludedInTemplate = true;\n // Replace all digits of the national prefix in the formatting template\n // with `DIGIT_PLACEHOLDER`s.\n if (nationalPrefix) {\n var i = nationalPrefix.length;\n while (i > 0) {\n numberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER);\n i--;\n }\n }\n }\n }\n\n // Generate formatting template for this phone number format.\n var template = digits\n // Format the dummy phone number according to the format.\n .replace(new RegExp(pattern), numberFormat)\n // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n .replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER);\n\n // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then just prepend such prefix\n // before the national (significant) number, optionally spacing\n // the two with a whitespace.\n if (!nationalPrefixIncludedInTemplate) {\n if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n // Prepend the prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;\n } else if (nationalPrefix) {\n // Prepend national prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n }\n }\n if (international) {\n template = applyInternationalSeparatorStyle(template);\n }\n return template;\n }\n }, {\n key: \"formatNextNationalNumberDigits\",\n value: function formatNextNationalNumberDigits(digits) {\n var result = populateTemplateWithDigits(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n if (!result) {\n // Reset the format.\n this.resetFormat();\n return;\n }\n this.populatedNationalNumberTemplate = result[0];\n this.populatedNationalNumberTemplatePosition = result[1];\n\n // Return the formatted phone number so far.\n return cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);\n\n // The old way which was good for `input-format` but is not so good\n // for `react-phone-number-input`'s default input (`InputBasic`).\n // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\n // \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\n }\n }, {\n key: \"shouldTryNationalPrefixFormattingRule\",\n value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {\n var international = _ref5.international,\n nationalPrefix = _ref5.nationalPrefix;\n if (format.nationalPrefixFormattingRule()) {\n // In some countries, `national_prefix_formatting_rule` is `($1)`,\n // so it applies even if the user hasn't input a national prefix.\n // `format.usesNationalPrefix()` detects such cases.\n var usesNationalPrefix = format.usesNationalPrefix();\n if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n return true;\n }\n }\n }\n }]);\n}();\nexport { AsYouTypeFormatter as default };\n//# sourceMappingURL=AsYouTypeFormatter.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport _extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport { VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from './constants.js';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');\nvar VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + PLUS_CHARS + ']' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*' + '|' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + '.*' + '$');\n\n// Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\nvar AsYouTypeParser = /*#__PURE__*/function () {\n function AsYouTypeParser(_ref) {\n var defaultCountry = _ref.defaultCountry,\n defaultCallingCode = _ref.defaultCallingCode,\n metadata = _ref.metadata,\n onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;\n _classCallCheck(this, AsYouTypeParser);\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.metadata = metadata;\n this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n }\n return _createClass(AsYouTypeParser, [{\n key: \"input\",\n value: function input(text, state) {\n var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),\n formattedDigits = _extractFormattedDigi2[0],\n hasPlus = _extractFormattedDigi2[1];\n var digits = parseDigits(formattedDigits);\n // Checks for a special case: just a leading `+` has been entered.\n var justLeadingPlus;\n if (hasPlus) {\n if (!state.digits) {\n state.startInternationalNumber(undefined, undefined);\n if (!digits) {\n justLeadingPlus = true;\n }\n }\n }\n if (digits) {\n this.inputDigits(digits, state);\n }\n return {\n digits: digits,\n justLeadingPlus: justLeadingPlus\n };\n }\n\n /**\r\n * Inputs \"next\" phone number digits.\r\n * @param {string} digits\r\n * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n */\n }, {\n key: \"inputDigits\",\n value: function inputDigits(nextDigits, state) {\n var digits = state.digits;\n var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;\n\n // Append phone number digits.\n state.appendDigits(nextDigits);\n\n // Attempt to extract IDD prefix:\n // Some users input their phone number in international format,\n // but in an \"out-of-country\" dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers as soon as there're at least 3 digits.\n // Google's library attempts to extract IDD prefix at 3 digits,\n // so this library just copies that behavior.\n // I guess that's because the most commot IDD prefixes are\n // `00` (Europe) and `011` (US).\n // There exist really long IDD prefixes too:\n // for example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n // An IDD prefix is extracted here, and then every time when\n // there's a new digit and the number couldn't be formatted.\n if (hasReceivedThreeLeadingDigits) {\n this.extractIddPrefix(state);\n }\n if (this.isWaitingForCountryCallingCode(state)) {\n if (!this.extractCountryCallingCode(state)) {\n return;\n }\n } else {\n state.appendNationalSignificantNumberDigits(nextDigits);\n }\n\n // If a phone number is being input in international format,\n // then it's not valid for it to have a national prefix.\n // Still, some people incorrectly input such numbers with a national prefix.\n // In such cases, only attempt to strip a national prefix if the number becomes too long.\n // (but that is done later, not here)\n if (!state.international) {\n if (!this.hasExtractedNationalSignificantNumber) {\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }\n }, {\n key: \"isWaitingForCountryCallingCode\",\n value: function isWaitingForCountryCallingCode(_ref2) {\n var international = _ref2.international,\n callingCode = _ref2.callingCode;\n return international && !callingCode;\n }\n\n // Extracts a country calling code from a number\n // being entered in internatonal format.\n }, {\n key: \"extractCountryCallingCode\",\n value: function extractCountryCallingCode(state) {\n var _extractCountryCallin = _extractCountryCallingCode('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n if (countryCallingCode) {\n state.setCallingCode(countryCallingCode);\n state.update({\n nationalSignificantNumber: number\n });\n return true;\n }\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan) {\n if (numberingPlan) {\n this.hasSelectedNumberingPlan = true;\n var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n } else {\n this.hasSelectedNumberingPlan = undefined;\n this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n }\n }\n\n /**\r\n * Extracts a national (significant) number from user input.\r\n * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n * and doesn't apply `national_prefix_transform_rule` after that.\r\n * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n * @return {boolean} [extracted]\r\n */\n }, {\n key: \"extractNationalSignificantNumber\",\n value: function extractNationalSignificantNumber(nationalDigits, setState) {\n if (!this.hasSelectedNumberingPlan) {\n return;\n }\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe.nationalPrefix,\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n if (nationalNumber === nationalDigits) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n\n /**\r\n * In Google's code this function is called \"attempt to extract longer NDD\".\r\n * \"Some national prefixes are a substring of others\", they say.\r\n * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n */\n }, {\n key: \"extractAnotherNationalSignificantNumber\",\n value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n if (!this.hasExtractedNationalSignificantNumber) {\n return this.extractNationalSignificantNumber(nationalDigits, setState);\n }\n if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n return;\n }\n var _extractNationalNumbe2 = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n nationalNumber = _extractNationalNumbe2.nationalNumber,\n carrierCode = _extractNationalNumbe2.carrierCode;\n // If a national prefix has been extracted previously,\n // then it's always extracted as additional digits are added.\n // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\n // doesn't do anything different from what it currently does.\n // So, just in case, here's this check, though it doesn't occur.\n /* istanbul ignore if */\n if (nationalNumber === prevNationalSignificantNumber) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n }, {\n key: \"onExtractedNationalNumber\",\n value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {\n // Tells if the parsed national (significant) number is present as-is in the input string.\n // For example, when inputting \"0343515551212999\" Argentinian mobile number,\n // the parsed national (significant) number is \"93435551212999\".\n // There, one can see how it stripped \"0\" national prefix and prepended a \"9\",\n // because that's how it is instructed to do in Argentina's metadata.\n // So in the described example, the parsed national (significant) number is not present\n // as-is in the input string. Instead, it's \"modified\" in the input string.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var nationalSignificantNumberIsModified = false;\n\n // In some countries, a phone number could have a prefix that is not a \"national prefix\"\n // but rather some other type of \"utility\" prefix.\n // For example, when calling within Australia, one could prepend `1831` prefix to hide\n // caller's phone number.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n\n // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.\n var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);\n\n // If the parsed national (significant) number is the last substring of the `nationalDigits`,\n // then it means that it's present as-is in the input string.\n // In any other case, the parsed national (significant) number is \"modified\" in the input string.\n if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {\n nationalSignificantNumberIsModified = true;\n } else {\n var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);\n // When national (significant) number is equal to the `nationalDigits`,\n // this `onExtractedNationalNumber()` function simply doesn't get called.\n // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.\n // Still, added this `if` check just to prevent potential silly bugs.\n // The `!prefixBeforeNationalNumber` case is not really testable\n // so this line is exluded from the code coverage.\n /* istanbul ignore if */\n if (prefixBeforeNationalNumber) {\n if (prefixBeforeNationalNumber !== nationalPrefix) {\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;\n }\n }\n }\n setState({\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode,\n nationalSignificantNumber: nationalSignificantNumber,\n nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix\n });\n // `onExtractedNationalNumber()` is only called when\n // the national (significant) number actually did change.\n this.hasExtractedNationalSignificantNumber = true;\n this.onNationalSignificantNumberChange();\n }\n }, {\n key: \"reExtractNationalSignificantNumber\",\n value: function reExtractNationalSignificantNumber(state) {\n // Attempt to extract a national prefix.\n //\n // Some people incorrectly input national prefix\n // in an international phone number.\n // For example, some people write British phone numbers as `+44(0)...`.\n //\n // Also, in some rare cases, it is valid for a national prefix\n // to be a part of an international phone number.\n // For example, mobile phone numbers in Mexico are supposed to be\n // dialled internationally using a `1` national prefix,\n // so the national prefix will be part of an international number.\n //\n // Quote from:\n // https://www.mexperience.com/dialing-cell-phones-in-mexico/\n //\n // \"Dialing a Mexican cell phone from abroad\n // When you are calling a cell phone number in Mexico from outside Mexico,\n // it’s necessary to dial an additional “1” after Mexico’s country code\n // (which is “52”) and before the area code.\n // You also ignore the 045, and simply dial the area code and the\n // cell phone’s number.\n //\n // If you don’t add the “1”, you’ll receive a recorded announcement\n // asking you to redial using it.\n //\n // For example, if you are calling from the USA to a cell phone\n // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\n // (Note that this is different to calling a land line in Mexico City\n // from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\n //\n // Google's demo output:\n // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\n //\n if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {\n return state.update(stateUpdate);\n })) {\n return true;\n }\n // If no format matches the phone number, then it could be\n // \"a really long IDD\" (quote from a comment in Google's library).\n // An IDD prefix is first extracted when the user has entered at least 3 digits,\n // and then here — every time when there's a new digit and the number\n // couldn't be formatted.\n // For example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n //\n // Could also check `!hasReceivedThreeLeadingDigits` here\n // to filter out the case when this check duplicates the one\n // already performed when there're 3 leading digits,\n // but it's not a big deal, and in most cases there\n // will be a suitable `format` when there're 3 leading digits.\n //\n if (this.extractIddPrefix(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n // Google's AsYouType formatter supports sort of an \"autocorrection\" feature\n // when it \"autocorrects\" numbers that have been input for a country\n // with that country's calling code.\n // Such \"autocorrection\" feature looks weird, but different people have been requesting it:\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n // https://github.com/catamphetamine/libphonenumber-js/issues/375\n // https://github.com/catamphetamine/libphonenumber-js/issues/316\n if (this.fixMissingPlus(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n }\n }, {\n key: \"extractIddPrefix\",\n value: function extractIddPrefix(state) {\n // An IDD prefix can't be present in a number written with a `+`.\n // Also, don't re-extract an IDD prefix if has already been extracted.\n var international = state.international,\n IDDPrefix = state.IDDPrefix,\n digits = state.digits,\n nationalSignificantNumber = state.nationalSignificantNumber;\n if (international || IDDPrefix) {\n return;\n }\n // Some users input their phone number in \"out-of-country\"\n // dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers.\n var numberWithoutIDD = stripIddPrefix(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\n if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\n // If an IDD prefix was stripped then convert the IDD-prefixed number\n // to international number for subsequent parsing.\n state.update({\n IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\n });\n this.startInternationalNumber(state, {\n country: undefined,\n callingCode: undefined\n });\n return true;\n }\n }\n }, {\n key: \"fixMissingPlus\",\n value: function fixMissingPlus(state) {\n if (!state.international) {\n var _extractCountryCallin2 = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n newCallingCode = _extractCountryCallin2.countryCallingCode;\n if (newCallingCode) {\n state.update({\n missingPlus: true\n });\n this.startInternationalNumber(state, {\n country: state.country,\n callingCode: newCallingCode\n });\n return true;\n }\n }\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(state, _ref3) {\n var country = _ref3.country,\n callingCode = _ref3.callingCode;\n state.startInternationalNumber(country, callingCode);\n // If a national (significant) number has been extracted before, reset it.\n if (state.nationalSignificantNumber) {\n state.resetNationalSignificantNumber();\n this.onNationalSignificantNumberChange();\n this.hasExtractedNationalSignificantNumber = undefined;\n }\n }\n }, {\n key: \"extractCallingCodeAndNationalSignificantNumber\",\n value: function extractCallingCodeAndNationalSignificantNumber(state) {\n if (this.extractCountryCallingCode(state)) {\n // `this.extractCallingCode()` is currently called when the number\n // couldn't be formatted during the standard procedure.\n // Normally, the national prefix would be re-extracted\n // for an international number if such number couldn't be formatted,\n // but since it's already not able to be formatted,\n // there won't be yet another retry, so also extract national prefix here.\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }]);\n}();\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\nexport { AsYouTypeParser as default };\nfunction extractFormattedPhoneNumber(text) {\n // Attempt to extract a possible number from the string passed in.\n var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);\n if (startsAt < 0) {\n return;\n }\n // Trim everything to the left of the phone number.\n text = text.slice(startsAt);\n // Trim the `+`.\n var hasPlus;\n if (text[0] === '+') {\n hasPlus = true;\n text = text.slice('+'.length);\n }\n // Trim everything to the right of the phone number.\n text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');\n // Re-add the previously trimmed `+`.\n if (hasPlus) {\n text = '+' + text;\n }\n return text;\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nfunction _extractFormattedDigitsAndPlus(text) {\n // Extract a formatted phone number part from text.\n var extractedNumber = extractFormattedPhoneNumber(text) || '';\n // Trim a `+`.\n if (extractedNumber[0] === '+') {\n return [extractedNumber.slice('+'.length), true];\n }\n return [extractedNumber];\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nexport function extractFormattedDigitsAndPlus(text) {\n var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n formattedDigits = _extractFormattedDigi4[0],\n hasPlus = _extractFormattedDigi4[1];\n // If the extracted phone number part\n // can possibly be a part of some valid phone number\n // then parse phone number characters from a formatted phone number.\n if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n formattedDigits = '';\n }\n return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata from './metadata.js';\nimport PhoneNumber from './PhoneNumber.js';\nimport AsYouTypeState from './AsYouTypeState.js';\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.js';\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport getCountryByNationalNumber from './helpers/getCountryByNationalNumber.js';\nimport isObject from './helpers/isObject.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar AsYouType = /*#__PURE__*/function () {\n /**\r\n * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n * @param {Object} metadata\r\n */\n function AsYouType(optionsOrDefaultCountry, metadata) {\n _classCallCheck(this, AsYouType);\n this.metadata = new Metadata(metadata);\n var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),\n _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),\n defaultCountry = _this$getCountryAndCa2[0],\n defaultCallingCode = _this$getCountryAndCa2[1];\n // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync.\n // For example, `this.defaultCountry` could be `\"AR\"` and `this.defaultCallingCode` could be `undefined`.\n // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent.\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.reset();\n }\n return _createClass(AsYouType, [{\n key: \"getCountryAndCallingCode\",\n value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n // Set `defaultCountry` and `defaultCallingCode` options.\n var defaultCountry;\n var defaultCallingCode;\n // Turns out `null` also has type \"object\". Weird.\n if (optionsOrDefaultCountry) {\n if (isObject(optionsOrDefaultCountry)) {\n defaultCountry = optionsOrDefaultCountry.defaultCountry;\n defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n } else {\n defaultCountry = optionsOrDefaultCountry;\n }\n }\n if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n defaultCountry = undefined;\n }\n if (defaultCallingCode) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n defaultCountry = '001';\n }\n }\n }\n return [defaultCountry, defaultCallingCode];\n }\n\n /**\r\n * Inputs \"next\" phone number characters.\r\n * @param {string} text\r\n * @return {string} Formatted phone number characters that have been input so far.\r\n */\n }, {\n key: \"input\",\n value: function input(text) {\n var _this$parser$input = this.parser.input(text, this.state),\n digits = _this$parser$input.digits,\n justLeadingPlus = _this$parser$input.justLeadingPlus;\n if (justLeadingPlus) {\n this.formattedOutput = '+';\n } else if (digits) {\n this.determineTheCountryIfNeeded();\n // Match the available formats by the currently available leading digits.\n if (this.state.nationalSignificantNumber) {\n this.formatter.narrowDownMatchingFormats(this.state);\n }\n var formattedNationalNumber;\n if (this.metadata.hasSelectedNumberingPlan()) {\n formattedNationalNumber = this.formatter.format(digits, this.state);\n }\n if (formattedNationalNumber === undefined) {\n // See if another national (significant) number could be re-extracted.\n if (this.parser.reExtractNationalSignificantNumber(this.state)) {\n this.determineTheCountryIfNeeded();\n // If it could, then re-try formatting the new national (significant) number.\n var nationalDigits = this.state.getNationalDigits();\n if (nationalDigits) {\n formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n }\n }\n }\n this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n }\n return this.formattedOutput;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var _this = this;\n this.state = new AsYouTypeState({\n onCountryChange: function onCountryChange(country) {\n // Before version `1.6.0`, the official `AsYouType` formatter API\n // included a `.country` property on an `AsYouType` instance.\n // Since that property (along with the others) have been moved to\n // `this.state`, `this.country` property is emulated for compatibility\n // with the old versions.\n _this.country = country;\n },\n onCallingCodeChange: function onCallingCodeChange(callingCode, country) {\n _this.metadata.selectNumberingPlan(country, callingCode);\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n _this.parser.reset(_this.metadata.numberingPlan);\n }\n });\n this.formatter = new AsYouTypeFormatter({\n state: this.state,\n metadata: this.metadata\n });\n this.parser = new AsYouTypeParser({\n defaultCountry: this.defaultCountry,\n defaultCallingCode: this.defaultCallingCode,\n metadata: this.metadata,\n state: this.state,\n onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n _this.determineTheCountryIfNeeded();\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n }\n });\n this.state.reset({\n country: this.defaultCountry,\n callingCode: this.defaultCallingCode\n });\n this.formattedOutput = '';\n return this;\n }\n\n /**\r\n * Returns `true` if the phone number is being input in international format.\r\n * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isInternational\",\n value: function isInternational() {\n return this.state.international;\n }\n\n /**\r\n * Returns the \"calling code\" part of the phone number when it's being input\r\n * in an international format.\r\n * If no valid calling code has been entered so far, returns `undefined`.\r\n * @return {string} [callingCode]\r\n */\n }, {\n key: \"getCallingCode\",\n value: function getCallingCode() {\n // If the number is being input in national format and some \"default calling code\"\n // has been passed to `AsYouType` constructor, then `this.state.callingCode`\n // is equal to that \"default calling code\".\n //\n // If the number is being input in national format and no \"default calling code\"\n // has been passed to `AsYouType` constructor, then returns `undefined`,\n // even if a \"default country\" has been passed to `AsYouType` constructor.\n //\n if (this.isInternational()) {\n return this.state.callingCode;\n }\n }\n\n // A legacy alias.\n }, {\n key: \"getCountryCallingCode\",\n value: function getCountryCallingCode() {\n return this.getCallingCode();\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * Returns `undefined` if no phone number has been input yet.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"getCountry\",\n value: function getCountry() {\n var digits = this.state.digits;\n // Return `undefined` if no digits have been input yet.\n if (digits) {\n return this._getCountry();\n }\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"_getCountry\",\n value: function _getCountry() {\n var country = this.state.country;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n // `AsYouType.getCountry()` returns `undefined`\n // for \"non-geographic\" phone numbering plans.\n if (country === '001') {\n return;\n }\n }\n return country;\n }\n }, {\n key: \"determineTheCountryIfNeeded\",\n value: function determineTheCountryIfNeeded() {\n // Suppose a user enters a phone number in international format,\n // and there're several countries corresponding to that country calling code,\n // and a country has been derived from the number, and then\n // a user enters one more digit and the number is no longer\n // valid for the derived country, so the country should be re-derived\n // on every new digit in those cases.\n //\n // If the phone number is being input in national format,\n // then it could be a case when `defaultCountry` wasn't specified\n // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\n // and that \"calling code\" could correspond to a \"non-geographic entity\",\n // or there could be several countries corresponding to that country calling code.\n // In those cases, `this.country` is `undefined` and should be derived\n // from the number. Again, if country calling code is ambiguous, then\n // `this.country` should be re-derived with each new digit.\n //\n if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\n this.determineTheCountry();\n }\n }\n\n // Prepends `+CountryCode ` in case of an international phone number\n }, {\n key: \"getFullNumber\",\n value: function getFullNumber(formattedNationalNumber) {\n var _this2 = this;\n if (this.isInternational()) {\n var prefix = function prefix(text) {\n return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {\n spacing: text ? true : false\n }) + text;\n };\n var callingCode = this.state.callingCode;\n if (!callingCode) {\n return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n }\n if (!formattedNationalNumber) {\n return prefix(callingCode);\n }\n return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\n }\n return formattedNationalNumber;\n }\n }, {\n key: \"getNonFormattedNationalNumberWithPrefix\",\n value: function getNonFormattedNationalNumberWithPrefix() {\n var _this$state = this.state,\n nationalSignificantNumber = _this$state.nationalSignificantNumber,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,\n nationalPrefix = _this$state.nationalPrefix;\n var number = nationalSignificantNumber;\n var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;\n if (prefix) {\n number = prefix + number;\n }\n return number;\n }\n }, {\n key: \"getNonFormattedNumber\",\n value: function getNonFormattedNumber() {\n var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;\n return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());\n }\n }, {\n key: \"getNonFormattedTemplate\",\n value: function getNonFormattedTemplate() {\n var number = this.getNonFormattedNumber();\n if (number) {\n return number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER);\n }\n }\n }, {\n key: \"isCountryCallingCodeAmbiguous\",\n value: function isCountryCallingCodeAmbiguous() {\n var callingCode = this.state.callingCode;\n var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);\n return countryCodes && countryCodes.length > 1;\n }\n\n // Determines the exact country of the phone number\n // entered so far based on the country phone code\n // and the national phone number.\n }, {\n key: \"determineTheCountry\",\n value: function determineTheCountry() {\n this.state.setCountry(getCountryByCallingCode(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n nationalNumber: this.state.nationalSignificantNumber,\n metadata: this.metadata\n }));\n }\n\n /**\r\n * Returns a E.164 phone number value for the user's input.\r\n *\r\n * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n * it will return `\"+12223334444\"`.\r\n *\r\n * For international phone number input, it will also auto-correct\r\n * some minor errors such as using a national prefix when writing\r\n * an international phone number. For example, if the user inputs\r\n * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n * `\"+447400000000\"` phone number value.\r\n *\r\n * Will return `undefined` if no digits have been input,\r\n * or when inputting a phone number in national format and no\r\n * default country or default \"country calling code\" have been set.\r\n *\r\n * @return {string} [value]\r\n */\n }, {\n key: \"getNumberValue\",\n value: function getNumberValue() {\n var _this$state2 = this.state,\n digits = _this$state2.digits,\n callingCode = _this$state2.callingCode,\n country = _this$state2.country,\n nationalSignificantNumber = _this$state2.nationalSignificantNumber;\n\n // Will return `undefined` if no digits have been input.\n if (!digits) {\n return;\n }\n if (this.isInternational()) {\n if (callingCode) {\n return '+' + callingCode + nationalSignificantNumber;\n } else {\n return '+' + digits;\n }\n } else {\n if (country || callingCode) {\n var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;\n return '+' + callingCode_ + nationalSignificantNumber;\n }\n }\n }\n\n /**\r\n * Returns an instance of `PhoneNumber` class.\r\n * Will return `undefined` if no national (significant) number\r\n * digits have been entered so far, or if no `defaultCountry` has been\r\n * set and the user enters a phone number not in international format.\r\n */\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var _this$state3 = this.state,\n nationalSignificantNumber = _this$state3.nationalSignificantNumber,\n carrierCode = _this$state3.carrierCode,\n callingCode = _this$state3.callingCode;\n\n // `this._getCountry()` is basically same as `this.state.country`\n // with the only change that it return `undefined` in case of a\n // \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\n var country = this._getCountry();\n if (!nationalSignificantNumber) {\n return;\n }\n\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `country` could be `\"AR\"` and `callingCode` could be `undefined`.\n // So `country` and `callingCode` are totally independent.\n\n if (!country && !callingCode) {\n return;\n }\n\n // By default, if `defaultCountry` parameter was passed when\n // creating `AsYouType` instance, `state.country` is gonna be\n // that `defaultCountry`, which doesn't entirely conform with\n // `parsePhoneNumber()`'s behavior where it attempts to determine\n // the country more precisely in cases when multiple countries\n // could correspond to the same `countryCallingCode`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969\n //\n // Because `AsYouType.getNumber()` method is supposed to be a 1:1\n // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`,\n // then it should also behave accordingly in cases of `country` ambiguity.\n // That's how users of this library would expect it to behave anyway.\n //\n if (country) {\n if (country === this.defaultCountry) {\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `state.country` could be `\"AR\"` and `state.callingCode` could be `undefined`.\n // So `state.country` and `state.callingCode` are totally independent.\n var metadata = new Metadata(this.metadata.metadata);\n metadata.selectNumberingPlan(country);\n var _callingCode = metadata.numberingPlan.callingCode();\n var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n if (ambiguousCountries.length > 1) {\n var exactCountry = getCountryByNationalNumber(nationalSignificantNumber, {\n countries: ambiguousCountries,\n metadata: this.metadata.metadata\n });\n if (exactCountry) {\n country = exactCountry;\n }\n }\n }\n }\n var phoneNumber = new PhoneNumber(country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n // Phone number extensions are not supported by \"As You Type\" formatter.\n return phoneNumber;\n }\n\n /**\r\n * Returns `true` if the phone number is \"possible\".\r\n * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isPossible();\n }\n\n /**\r\n * Returns `true` if the phone number is \"valid\".\r\n * Is just a shortcut for `PhoneNumber.isValid()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isValid\",\n value: function isValid() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isValid();\n }\n\n /**\r\n * @deprecated\r\n * This method is used in `react-phone-number-input/source/input-control.js`\r\n * in versions before `3.0.16`.\r\n */\n }, {\n key: \"getNationalNumber\",\n value: function getNationalNumber() {\n return this.state.nationalSignificantNumber;\n }\n\n /**\r\n * Returns the phone number characters entered by the user.\r\n * @return {string}\r\n */\n }, {\n key: \"getChars\",\n value: function getChars() {\n return (this.state.international ? '+' : '') + this.state.digits;\n }\n\n /**\r\n * Returns the template for the formatted phone number.\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplate\",\n value: function getTemplate() {\n return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n }\n }]);\n}();\nexport { AsYouType as default };\n//# sourceMappingURL=AsYouType.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nimport { AsYouType as _AsYouType } from '../../core/index.js'\r\n\r\nexport function AsYouType(country) {\r\n\treturn _AsYouType.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(_AsYouType.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","_defineProperties","e","r","t","length","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","i","toPrimitive","call","TypeError","String","Number","_toPrimitive","AsYouTypeState","_ref","onCountryChange","onCallingCodeChange","a","n","_classCallCheck","this","value","_ref2","country","callingCode","international","missingPlus","IDDPrefix","undefined","digits","resetNationalSignificantNumber","initCountryAndCallingCode","nationalSignificantNumber","getNationalDigits","nationalSignificantNumberIsModified","nationalPrefix","carrierCode","prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix","properties","_i","_Object$keys","keys","setCountry","setCallingCode","nextDigits","slice","_createForOfIteratorHelperLoose","next","bind","Array","isArray","_arrayLikeToArray","toString","name","from","test","_unsupportedIterableToArray","done","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","RegExp","repeat","string","times","result","cutAndStripNonPairedParens","cutBeforeIndex","dangling_braces","push","pop","start","cleared_string","_dangling_braces","index","stripNonPairedParens","formatCompleteNumber","state","format","metadata","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","concat","pattern","formattedNumber","formatNationalNumber","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","_ref3","formattedNationalNumber","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","parseDigits","isValidFormattedNationalNumber","PatternParser","context","or","instructions","parsePattern","Error","_this$context$","branches","op","args","expandSingleElementArray","match","OPERATOR","operator","before","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","ILLEGAL_CHARACTER_REGEXP","split","values","prevValue","charCodeAt","nextValue","fromCharCode","array","PatternMatcher","matchTree","parse","allowOverflow","arguments","_match","matchedChars","overflow","characters","tree","last","characterString","join","indexOf","partialMatch","restCharacters","JSON","stringify","_step","_iterator","_result","_step2","_iterator2","_char","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","resetFormat","chosenFormat","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","numberingPlan","isNANP","matchingFormats","formats","narrowDownMatchingFormats","_this","checkNumberLength","_format","formattedCompleteNumber","setNationalNumberTemplate","replace","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","_this2","leadingDigits","leadingDigitsPatternIndex","filter","formatSuits","formatMatches","usesNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","leadingDigitsPatterns","Math","min","leadingDigitsPattern","error","console","internationalFormat","_this3","_loop","getFormatFormat","createTemplateForFormat","_","getTemplateForFormat","nationalPrefixFormattingRule","options","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","_ref4","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","applyInternationalSeparatorStyle","position","digit","search","populateTemplateWithDigits","_ref5","_slicedToArray","_arrayWithHoles","l","u","f","_iterableToArrayLimit","_nonIterableRest","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","defaultCountry","defaultCallingCode","onNationalSignificantNumberChange","text","justLeadingPlus","_extractFormattedDigi","_extractFormattedDigi3","extractedNumber","hasPlus","startsAt","extractFormattedPhoneNumber","_extractFormattedDigitsAndPlus","_extractFormattedDigi4","formattedDigits","extractFormattedDigitsAndPlus","_extractFormattedDigi2","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","extractCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","stateUpdate","update","_extractCountryCallin","countryCallingCode","number","hasSelectedNumberingPlan","nationalPrefixForParsing","_nationalPrefixForParsing","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","setState","_extractNationalNumbe","extractNationalNumberFromPossiblyIncompleteNumber","nationalNumber","onExtractedNationalNumber","prevNationalSignificantNumber","_extractNationalNumbe2","nationalSignificantNumberIndex","prefixBeforeNationalNumber","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","numberWithoutIDD","stripIddPrefix","newCallingCode","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","AsYouType","optionsOrDefaultCountry","_this$getCountryAndCa2","getCountryAndCallingCode","reset","isObject","hasCountry","_this$parser$input","parser","input","formattedOutput","determineTheCountryIfNeeded","formatter","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","selectNumberingPlan","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","prefix","_this$state","getNonFormattedNationalNumberWithPrefix","countryCodes","getCountryCodesForCallingCode","getCountryByCallingCode","_this$state2","_this$state3","_callingCode","ambiguousCountries","exactCountry","getCountryByNationalNumber","countries","phoneNumber","PhoneNumber","getNumber","isPossible","isValid","getTemplate","getNonFormattedTemplate","create","getExampleNumber","examples","withMetadataArgument"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"330.prod.js","mappings":"iHAGA,KAAgB,GAAK,QAAQ,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,UAAU,GAAK,WAAW,GAAK,UAAU,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,UAAU,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,QAAQ,GAAK,YAAY,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,QAAQ,GAAK,UAAU,GAAK,SAAS,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,SAAS,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,SAAS,GAAK,WAAW,GAAK,SAAS,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,SAAS,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,QAAQ,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,OAAO,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,OAAO,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,SAAS,GAAK,UAA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/examples.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeState.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js"],"sourcesContent":["// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"470123456\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"0195123456\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"34412345\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"60123456\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"2221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string` — The exact country of the phone number, if it could be determined.\n// When inputting a phone number in \"international\" format, it will derive the `country` from \"country calling code\" and the phone number digits.\n// When inputting a phone number in \"national\" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.\n// Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for \"non-geographic phone numbers\" `state.country` would've been \"001\".\n// * `callingCode?: string` — \"Country calling code\" that has been extracted from the input phone number.\n// When inputting a phone number in \"international\" format, it will extract the \"country calling code\" from the digits that follow the \"+\" character.\n// When inputting a phone number in \"national\" format, `callingCode` will be `undefined`.\n// Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in \"international\" format.\n// * `digits: string` — Phone number digits that have been input so far, including the \"+\" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.\n// * `international: boolean` — Whether the phone number is being input in \"international\" format, i.e. with a \"+\" character.\n// * `missingPlus: boolean` — Whether it's a phone number in \"international\" format that is missing the leading \"+\" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.\n// * `IDDPrefix?: string` — An \"IDD prefix\", when the phone number is being input in an \"out-of-country dialing\" format. https://wikitravel.org/en/International_dialling_prefix\n// * `carrierCode?: string` — A \"carrier code\", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.\n// * `nationalPrefix?: string` — \"National prefix\", if present in the phone number input.\n// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.\n// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting \"0343515551212999\" Argentinian mobile number, the parsed national (significant) number is \"93435551212999\". There, one can see how it stripped \"0\" national prefix and prepended a \"9\", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's \"modified\" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a \"national prefix\" but rather some other type of \"utility\" prefix.\n// For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.\n// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n function AsYouTypeState(_ref) {\n var onCountryChange = _ref.onCountryChange,\n onCallingCodeChange = _ref.onCallingCodeChange;\n _classCallCheck(this, AsYouTypeState);\n this.onCountryChange = onCountryChange;\n this.onCallingCodeChange = onCallingCodeChange;\n }\n return _createClass(AsYouTypeState, [{\n key: \"reset\",\n value: function reset(_ref2) {\n var country = _ref2.country,\n callingCode = _ref2.callingCode;\n this.international = false;\n this.missingPlus = false;\n this.IDDPrefix = undefined;\n this.callingCode = undefined;\n this.digits = '';\n this.resetNationalSignificantNumber();\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"resetNationalSignificantNumber\",\n value: function resetNationalSignificantNumber() {\n this.nationalSignificantNumber = this.getNationalDigits();\n this.nationalSignificantNumberIsModified = false;\n this.nationalPrefix = undefined;\n this.carrierCode = undefined;\n this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = undefined;\n }\n }, {\n key: \"update\",\n value: function update(properties) {\n for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n this[key] = properties[key];\n }\n }\n }, {\n key: \"initCountryAndCallingCode\",\n value: function initCountryAndCallingCode(country, callingCode) {\n this.setCountry(country);\n this.setCallingCode(callingCode);\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(country) {\n this.country = country;\n this.onCountryChange(country);\n }\n }, {\n key: \"setCallingCode\",\n value: function setCallingCode(callingCode) {\n this.callingCode = callingCode;\n this.onCallingCodeChange(callingCode, this.country);\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(country, callingCode) {\n // Prepend the `+` to parsed input.\n this.international = true;\n // If a default country was set then reset it\n // because an explicitly international phone\n // number is being entered.\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"appendDigits\",\n value: function appendDigits(nextDigits) {\n this.digits += nextDigits;\n }\n }, {\n key: \"appendNationalSignificantNumberDigits\",\n value: function appendNationalSignificantNumberDigits(nextDigits) {\n this.nationalSignificantNumber += nextDigits;\n }\n\n /**\r\n * Returns the part of `this.digits` that corresponds to the national number.\r\n * Basically, all digits that have been input by the user, except for the\r\n * international prefix and the country calling code part\r\n * (if the number is an international one).\r\n * @return {string}\r\n */\n }, {\n key: \"getNationalDigits\",\n value: function getNationalDigits() {\n if (this.international) {\n return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));\n }\n return this.digits;\n }\n }, {\n key: \"getDigitsWithoutInternationalPrefix\",\n value: function getDigitsWithoutInternationalPrefix() {\n if (this.international) {\n if (this.IDDPrefix) {\n return this.digits.slice(this.IDDPrefix.length);\n }\n }\n return this.digits;\n }\n }]);\n}();\nexport { AsYouTypeState as default };\n//# sourceMappingURL=AsYouTypeState.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nexport function countOccurences(symbol, string) {\n var count = 0;\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for counting brackets it is safe.\n // for (const character of string)\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n if (character === symbol) {\n count++;\n }\n }\n return count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n if (times < 1) {\n return '';\n }\n var result = '';\n while (times > 1) {\n if (times & 1) {\n result += string;\n }\n times >>= 1;\n string += string;\n }\n return result + string;\n}\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\n if (string[cutBeforeIndex] === ')') {\n cutBeforeIndex++;\n }\n return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nexport function closeNonPairedParens(template, cut_before) {\n var retained_template = template.slice(0, cut_before);\n var opening_braces = countOccurences('(', retained_template);\n var closing_braces = countOccurences(')', retained_template);\n var dangling_braces = opening_braces - closing_braces;\n while (dangling_braces > 0 && cut_before < template.length) {\n if (template[cut_before] === ')') {\n dangling_braces--;\n }\n cut_before++;\n }\n return template.slice(0, cut_before);\n}\nexport function stripNonPairedParens(string) {\n var dangling_braces = [];\n var i = 0;\n while (i < string.length) {\n if (string[i] === '(') {\n dangling_braces.push(i);\n } else if (string[i] === ')') {\n dangling_braces.pop();\n }\n i++;\n }\n var start = 0;\n var cleared_string = '';\n dangling_braces.push(string.length);\n for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {\n var index = _dangling_braces[_i];\n cleared_string += string.slice(start, index);\n start = index + 1;\n }\n return cleared_string;\n}\nexport function populateTemplateWithDigits(template, position, digits) {\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for `digits` it is safe.\n // for (const digit of digits)\n for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {\n var digit = _step2.value;\n // If there is room for more digits in current `template`,\n // then set the next digit in the `template`,\n // and return the formatted digits so far.\n // If more digits are entered than the current format could handle.\n if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\n return;\n }\n position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n }\n return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map","import checkNumberLength from './helpers/checkNumberLength.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nexport default function formatCompleteNumber(state, format, _ref) {\n var metadata = _ref.metadata,\n shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;\n var matcher = new RegExp(\"^(?:\".concat(format.pattern(), \")$\"));\n if (matcher.test(state.nationalSignificantNumber)) {\n return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n metadata: metadata,\n shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n });\n }\n}\nexport function canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {\n return checkNumberLength(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';\n}\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {\n var metadata = _ref2.metadata,\n shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;\n // `format` has already been checked for `nationalPrefix` requirement.\n\n var nationalSignificantNumber = state.nationalSignificantNumber,\n international = state.international,\n nationalPrefix = state.nationalPrefix,\n carrierCode = state.carrierCode;\n\n // Format the number with using `national_prefix_formatting_rule`.\n // If the resulting formatted number is a valid formatted number, then return it.\n //\n // Google's AsYouType formatter is different in a way that it doesn't try\n // to format using the \"national prefix formatting rule\", and instead it\n // simply prepends a national prefix followed by a \" \" character.\n // This code does that too, but as a fallback.\n // The reason is that \"national prefix formatting rule\" may use parentheses,\n // which wouldn't be included has it used the simpler Google's way.\n //\n if (shouldTryNationalPrefixFormattingRule(format)) {\n var formattedNumber = formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: true,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n if (formattedNumber) {\n return formattedNumber;\n }\n }\n\n // Format the number without using `national_prefix_formatting_rule`.\n return formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: false,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n}\nfunction formatNationalNumber(state, format, _ref3) {\n var metadata = _ref3.metadata,\n useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n var formattedNationalNumber = formatNationalNumberUsingFormat(state.nationalSignificantNumber, format, {\n carrierCode: state.carrierCode,\n useInternationalFormat: state.international,\n withNationalPrefix: useNationalPrefixFormattingRule,\n metadata: metadata\n });\n if (!useNationalPrefixFormattingRule) {\n if (state.nationalPrefix) {\n // If a national prefix was extracted, then just prepend it,\n // followed by a \" \" character.\n formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;\n } else if (state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;\n }\n }\n if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n return formattedNationalNumber;\n }\n}\n\n// Check that the formatted phone number contains exactly\n// the same digits that have been input by the user.\n// For example, when \"0111523456789\" is input for `AR` country,\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\n// which means that the national part of `this.digits` isn't simply equal to\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\n//\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\n// being formatted via `metadata[country].national_prefix_transform_rule`.\n// For example, for `VI` country, it prepends `340` to the national number,\n// and if this check hasn't been implemented, then there would be a bug\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\n//\n// So, all these \"gotchas\" are filtered out.\n//\n// In the original Google's code, the comments say:\n// \"Check that we didn't remove nor add any extra digits when we matched\n// this formatting pattern. This usually happens after we entered the last\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\n// formatted but AYTF should retain all the number entered and not change\n// in order to match a format (of same leading digits and length) display\n// in that way.\"\n// \"If it's the same (i.e entered number and format is same), then it's\n// safe to return this in formatted number as nothing is lost / added.\"\n// Otherwise, don't use this format.\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\n//\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n return parseDigits(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar PatternParser = /*#__PURE__*/function () {\n function PatternParser() {\n _classCallCheck(this, PatternParser);\n }\n return _createClass(PatternParser, [{\n key: \"parse\",\n value: function parse(pattern) {\n this.context = [{\n or: true,\n instructions: []\n }];\n this.parsePattern(pattern);\n if (this.context.length !== 1) {\n throw new Error('Non-finalized contexts left when pattern parse ended');\n }\n var _this$context$ = this.context[0],\n branches = _this$context$.branches,\n instructions = _this$context$.instructions;\n if (branches) {\n return {\n op: '|',\n args: branches.concat([expandSingleElementArray(instructions)])\n };\n }\n\n /* istanbul ignore if */\n if (instructions.length === 0) {\n throw new Error('Pattern is required');\n }\n if (instructions.length === 1) {\n return instructions[0];\n }\n return instructions;\n }\n }, {\n key: \"startContext\",\n value: function startContext(context) {\n this.context.push(context);\n }\n }, {\n key: \"endContext\",\n value: function endContext() {\n this.context.pop();\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context[this.context.length - 1];\n }\n }, {\n key: \"parsePattern\",\n value: function parsePattern(pattern) {\n if (!pattern) {\n throw new Error('Pattern is required');\n }\n var match = pattern.match(OPERATOR);\n if (!match) {\n if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n }\n this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n return;\n }\n var operator = match[1];\n var before = pattern.slice(0, match.index);\n var rightPart = pattern.slice(match.index + operator.length);\n switch (operator) {\n case '(?:':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n or: true,\n instructions: [],\n branches: []\n });\n break;\n case ')':\n if (!this.getContext().or) {\n throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n }\n if (before) {\n this.parsePattern(before);\n }\n if (this.getContext().instructions.length === 0) {\n throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n }\n var _this$getContext = this.getContext(),\n branches = _this$getContext.branches;\n branches.push(expandSingleElementArray(this.getContext().instructions));\n this.endContext();\n this.getContext().instructions.push({\n op: '|',\n args: branches\n });\n break;\n case '|':\n if (!this.getContext().or) {\n throw new Error('\"|\" operator can only be used inside \"or\" groups');\n }\n if (before) {\n this.parsePattern(before);\n }\n // The top-level is an implicit \"or\" group, if required.\n if (!this.getContext().branches) {\n // `branches` are not defined only for the root implicit \"or\" operator.\n /* istanbul ignore else */\n if (this.context.length === 1) {\n this.getContext().branches = [];\n } else {\n throw new Error('\"branches\" not found in an \"or\" group context');\n }\n }\n this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n this.getContext().instructions = [];\n break;\n case '[':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n oneOfSet: true\n });\n break;\n case ']':\n if (!this.getContext().oneOfSet) {\n throw new Error('\"]\" operator must be preceded by \"[\" operator');\n }\n this.endContext();\n this.getContext().instructions.push({\n op: '[]',\n args: parseOneOfSet(before)\n });\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unknown operator: \".concat(operator));\n }\n if (rightPart) {\n this.parsePattern(rightPart);\n }\n }\n }]);\n}();\nexport { PatternParser as default };\nfunction parseOneOfSet(pattern) {\n var values = [];\n var i = 0;\n while (i < pattern.length) {\n if (pattern[i] === '-') {\n if (i === 0 || i === pattern.length - 1) {\n throw new Error(\"Couldn't parse a one-of set pattern: \".concat(pattern));\n }\n var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n var value = prevValue;\n while (value <= nextValue) {\n values.push(String.fromCharCode(value));\n value++;\n }\n } else {\n values.push(pattern[i]);\n }\n i++;\n }\n return values;\n}\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp(\n// any of:\n'(' +\n// or operator\n'\\\\|' +\n// or\n'|' +\n// or group start\n'\\\\(\\\\?\\\\:' +\n// or\n'|' +\n// or group end\n'\\\\)' +\n// or\n'|' +\n// one-of set start\n'\\\\[' +\n// or\n'|' +\n// one-of set end\n'\\\\]' + ')');\nfunction expandSingleElementArray(array) {\n if (array.length === 1) {\n return array[0];\n }\n return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport PatternParser from './AsYouTypeFormatter.PatternParser.js';\nvar PatternMatcher = /*#__PURE__*/function () {\n function PatternMatcher(pattern) {\n _classCallCheck(this, PatternMatcher);\n this.matchTree = new PatternParser().parse(pattern);\n }\n return _createClass(PatternMatcher, [{\n key: \"match\",\n value: function match(string) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n allowOverflow = _ref.allowOverflow;\n if (!string) {\n throw new Error('String is required');\n }\n var result = _match(string.split(''), this.matchTree, true);\n if (result && result.match) {\n delete result.matchedChars;\n }\n if (result && result.overflow) {\n if (!allowOverflow) {\n return;\n }\n }\n return result;\n }\n }]);\n}();\n/**\r\n * Matches `characters` against a pattern compiled into a `tree`.\r\n * @param {string[]} characters\r\n * @param {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.\r\n * @param {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.\r\n * @return {object} See the `*.d.ts` file for the description of the result object.\r\n */\nexport { PatternMatcher as default };\nfunction _match(characters, tree, last) {\n // If `tree` is a string, then `tree` is a single character.\n // That's because when a pattern is parsed, multi-character-string parts\n // of a pattern are compiled into arrays of single characters.\n // I still wrote this piece of code for a \"general\" hypothetical case\n // when `tree` could be a string of several characters, even though\n // such case is not possible with the current implementation.\n if (typeof tree === 'string') {\n var characterString = characters.join('');\n if (tree.indexOf(characterString) === 0) {\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore else */\n if (characters.length === tree.length) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore next */\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n if (characterString.indexOf(tree) === 0) {\n if (last) {\n // The `else` path is not possible because `tree` is always a single character.\n // The `else` case for `characters.length > tree.length` would be\n // `characters.length <= tree.length` which means `characters.length <= 1`.\n // `characters` array can't be empty, so that means `characters === [tree]`,\n // which would also mean `tree.indexOf(characterString) === 0` and that'd mean\n // that the `if (tree.indexOf(characterString) === 0)` condition before this\n // `if` condition would be entered, and returned from there, not reaching this code.\n /* istanbul ignore else */\n if (characters.length > tree.length) {\n return {\n overflow: true\n };\n }\n }\n return {\n match: true,\n matchedChars: characters.slice(0, tree.length)\n };\n }\n return;\n }\n if (Array.isArray(tree)) {\n var restCharacters = characters.slice();\n var i = 0;\n while (i < tree.length) {\n var subtree = tree[i];\n var result = _match(restCharacters, subtree, last && i === tree.length - 1);\n if (!result) {\n return;\n } else if (result.overflow) {\n return result;\n } else if (result.match) {\n // Continue with the next subtree with the rest of the characters.\n restCharacters = restCharacters.slice(result.matchedChars.length);\n if (restCharacters.length === 0) {\n if (i === tree.length - 1) {\n return {\n match: true,\n matchedChars: characters\n };\n } else {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n }\n } else {\n /* istanbul ignore else */\n if (result.partialMatch) {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n }\n }\n i++;\n }\n // If `last` then overflow has already been checked\n // by the last element of the `tree` array.\n /* istanbul ignore if */\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: characters.slice(0, characters.length - restCharacters.length)\n };\n }\n switch (tree.op) {\n case '|':\n var partialMatch;\n for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n var branch = _step.value;\n var _result = _match(characters, branch, last);\n if (_result) {\n if (_result.overflow) {\n return _result;\n } else if (_result.match) {\n return {\n match: true,\n matchedChars: _result.matchedChars\n };\n } else {\n /* istanbul ignore else */\n if (_result.partialMatch) {\n partialMatch = true;\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(_result, null, 2)));\n }\n }\n }\n }\n if (partialMatch) {\n return {\n partialMatch: true\n // matchedChars: ...\n };\n }\n // Not even a partial match.\n return;\n case '[]':\n for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n var _char = _step2.value;\n if (characters[0] === _char) {\n if (characters.length === 1) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: [_char]\n };\n }\n }\n // No character matches.\n return;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unsupported instruction tree: \".concat(tree));\n }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DIGIT_PLACEHOLDER, countOccurences, repeat, cutAndStripNonPairedParens, closeNonPairedParens, stripNonPairedParens, populateTemplateWithDigits } from './AsYouTypeFormatter.util.js';\nimport formatCompleteNumber, { canFormatCompleteNumber } from './AsYouTypeFormatter.complete.js';\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher.js';\nimport parseDigits from './helpers/parseDigits.js';\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util.js';\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat.js';\nimport { VALID_PUNCTUATION } from './constants.js';\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle.js';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// A set of characters that, if found in a national prefix formatting rules, are an indicator to\n// us that we should separate the national prefix from the number when formatting.\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;\n\n// Deprecated: Google has removed some formatting pattern related code from their repo.\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\n// Because this library supports generating custom metadata\n// some users may still be using old metadata so the relevant\n// code seems to stay until some next major version update.\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true;\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\[([^\\[\\]])*\\]/g;\n};\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\d(?=[^,}][^,}])/g;\n};\n\n// A regular expression that is used to determine if a `format` is\n// suitable to be used in the \"as you type formatter\".\n// A `format` is suitable when the resulting formatted number has\n// the same digits as the user has entered.\n//\n// In the simplest case, that would mean that the format\n// doesn't add any additional digits when formatting a number.\n// Google says that it also shouldn't add \"star\" (`*`) characters,\n// like it does in some Israeli formats.\n// Such basic format would only contain \"valid punctuation\"\n// and \"captured group\" identifiers ($1, $2, etc).\n//\n// An example of a format that adds additional digits:\n//\n// Country: `AR` (Argentina).\n// Format:\n// {\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n// \"leading_digits_patterns\": [\"91\"],\n// \"national_prefix_formatting_rule\": \"0$1\",\n// \"format\": \"$2 15-$3-$4\",\n// \"international_format\": \"$1 $2 $3-$4\"\n// }\n//\n// In the format above, the `format` adds `15` to the digits when formatting a number.\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\n// has previously removed `15` from a national number, so re-adding `15` in `format`\n// doesn't actually result in any extra digits added to user's input.\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\n//\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\n// `libphonenumber` code.\n//\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + VALID_PUNCTUATION + ']*' +\n// Google developers say:\n// \"We require that the first matching group is present in the\n// output pattern to ensure no data is lost while formatting.\"\n'\\\\$1' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)*' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \"leading digits pattern\" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n function AsYouTypeFormatter(_ref) {\n var state = _ref.state,\n metadata = _ref.metadata;\n _classCallCheck(this, AsYouTypeFormatter);\n this.metadata = metadata;\n this.resetFormat();\n }\n return _createClass(AsYouTypeFormatter, [{\n key: \"resetFormat\",\n value: function resetFormat() {\n this.chosenFormat = undefined;\n this.template = undefined;\n this.nationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplatePosition = -1;\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan, state) {\n this.resetFormat();\n if (numberingPlan) {\n this.isNANP = numberingPlan.callingCode() === '1';\n this.matchingFormats = numberingPlan.formats();\n if (state.nationalSignificantNumber) {\n this.narrowDownMatchingFormats(state);\n }\n } else {\n this.isNANP = undefined;\n this.matchingFormats = [];\n }\n }\n\n /**\r\n * Formats an updated phone number.\r\n * @param {string} nextDigits — Additional phone number digits.\r\n * @param {object} state — `AsYouType` state.\r\n * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n */\n }, {\n key: \"format\",\n value: function format(nextDigits, state) {\n var _this = this;\n // See if the phone number digits can be formatted as a complete phone number.\n // If not, use the results from `formatNationalNumberWithNextDigits()`,\n // which formats based on the chosen formatting pattern.\n //\n // Attempting to format complete phone number first is how it's done\n // in Google's `libphonenumber`, so this library just follows it.\n // Google's `libphonenumber` code doesn't explain in detail why does it\n // attempt to format digits as a complete phone number\n // instead of just going with a previoulsy (or newly) chosen `format`:\n //\n // \"Checks to see if there is an exact pattern match for these digits.\n // If so, we should use this instead of any other formatting template\n // whose leadingDigitsPattern also matches the input.\"\n //\n if (canFormatCompleteNumber(state.nationalSignificantNumber, state.country, this.metadata)) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n var _format = _step.value;\n var formattedCompleteNumber = formatCompleteNumber(state, _format, {\n metadata: this.metadata,\n shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {\n return _this.shouldTryNationalPrefixFormattingRule(format, {\n international: state.international,\n nationalPrefix: state.nationalPrefix\n });\n },\n getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {\n return _this.getSeparatorAfterNationalPrefix(format);\n }\n });\n if (formattedCompleteNumber) {\n this.resetFormat();\n this.chosenFormat = _format;\n this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state);\n this.populatedNationalNumberTemplate = formattedCompleteNumber;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER);\n return formattedCompleteNumber;\n }\n }\n }\n // Format the digits as a partial (incomplete) phone number\n // using the previously chosen formatting pattern (or a newly chosen one).\n return this.formatNationalNumberWithNextDigits(nextDigits, state);\n }\n\n // Formats the next phone number digits.\n }, {\n key: \"formatNationalNumberWithNextDigits\",\n value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n var previouslyChosenFormat = this.chosenFormat;\n\n // Choose a format from the list of matching ones.\n var newlyChosenFormat = this.chooseFormat(state);\n if (newlyChosenFormat) {\n if (newlyChosenFormat === previouslyChosenFormat) {\n // If it can format the next (current) digits\n // using the previously chosen phone number format\n // then return the updated formatted number.\n return this.formatNextNationalNumberDigits(nextDigits);\n } else {\n // If a more appropriate phone number format\n // has been chosen for these \"leading digits\",\n // then re-format the national phone number part\n // using the newly selected format.\n return this.formatNextNationalNumberDigits(state.getNationalDigits());\n }\n }\n }\n }, {\n key: \"narrowDownMatchingFormats\",\n value: function narrowDownMatchingFormats(_ref2) {\n var _this2 = this;\n var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n nationalPrefix = _ref2.nationalPrefix,\n international = _ref2.international;\n var leadingDigits = nationalSignificantNumber;\n\n // \"leading digits\" pattern list starts with a\n // \"leading digits\" pattern fitting a maximum of 3 leading digits.\n // So, after a user inputs 3 digits of a national (significant) phone number\n // this national (significant) number can already be formatted.\n // The next \"leading digits\" pattern is for 4 leading digits max,\n // and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\n\n // This implementation is different from Google's\n // in that it searches for a fitting format\n // even if the user has entered less than\n // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\n // Because some leading digit patterns already match for a single first digit.\n var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n if (leadingDigitsPatternIndex < 0) {\n leadingDigitsPatternIndex = 0;\n }\n this.matchingFormats = this.matchingFormats.filter(function (format) {\n return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n });\n\n // If there was a phone number format chosen\n // and it no longer holds given the new leading digits then reset it.\n // The test for this `if` condition is marked as:\n // \"Reset a chosen format when it no longer holds given the new leading digits\".\n // To construct a valid test case for this one can find a country\n // in `PhoneNumberMetadata.xml` yielding one format for 3 ``\n // and yielding another format for 4 `` (Australia in this case).\n if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\n this.resetFormat();\n }\n }\n }, {\n key: \"formatSuits\",\n value: function formatSuits(format, international, nationalPrefix) {\n // When a prefix before a national (significant) number is\n // simply a national prefix, then it's parsed as `this.nationalPrefix`.\n // In more complex cases, a prefix before national (significant) number\n // could include a national prefix as well as some \"capturing groups\",\n // and in that case there's no info whether a national prefix has been parsed.\n // If national prefix is not used when formatting a phone number\n // using this format, but a national prefix has been entered by the user,\n // and was extracted, then discard such phone number format.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\n if (nationalPrefix && !format.usesNationalPrefix() &&\n // !format.domesticCarrierCodeFormattingRule() &&\n !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n return false;\n }\n // If national prefix is mandatory for this phone number format\n // and there're no guarantees that a national prefix is present in user input\n // then discard this phone number format as not suitable.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\n if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n return false;\n }\n return true;\n }\n }, {\n key: \"formatMatches\",\n value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;\n\n // If this format is not restricted to a certain\n // leading digits pattern then it fits.\n // The test case could be found by searching for \"leadingDigitsPatternsCount === 0\".\n if (leadingDigitsPatternsCount === 0) {\n return true;\n }\n\n // Start narrowing down the list of possible formats based on the leading digits.\n // (only previously matched formats take part in the narrowing down process)\n\n // `leading_digits_patterns` start with 3 digits min\n // and then go up from there one digit at a time.\n leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];\n\n // Google imposes a requirement on the leading digits\n // to be minimum 3 digits long in order to be eligible\n // for checking those with a leading digits pattern.\n //\n // Since `leading_digits_patterns` start with 3 digits min,\n // Google's original `libphonenumber` library only starts\n // excluding any non-matching formats only when the\n // national number entered so far is at least 3 digits long,\n // otherwise format matching would give false negatives.\n //\n // For example, when the digits entered so far are `2`\n // and the leading digits pattern is `21` –\n // it's quite obvious in this case that the format could be the one\n // but due to the absence of further digits it would give false negative.\n //\n // Also, `leading_digits_patterns` doesn't always correspond to a single\n // digits count. For example, `60|8` pattern would already match `8`\n // but the `60` part would require having at least two leading digits,\n // so the whole pattern would require inputting two digits first in order to\n // decide on whether it matches the input, even when the input is \"80\".\n //\n // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\n // even when there's only 1 or 2 digits of the national (significant) number.\n // To do that, it uses a non-strict pattern matcher written specifically for that.\n //\n if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\n // Before leading digits < 3 matching was implemented:\n // return true\n //\n // After leading digits < 3 matching was implemented:\n try {\n return new PatternMatcher(leadingDigitsPattern).match(leadingDigits, {\n allowOverflow: true\n }) !== undefined;\n } catch (error) /* istanbul ignore next */{\n // There's a slight possibility that there could be some undiscovered bug\n // in the pattern matcher code. Since the \"leading digits < 3 matching\"\n // feature is not \"essential\" for operation, it can fall back to the old way\n // in case of any issues rather than halting the application's execution.\n console.error(error);\n return true;\n }\n }\n\n // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\n // available then use the usual regular expression matching.\n //\n // The whole pattern is wrapped in round brackets (`()`) because\n // the pattern can use \"or\" operator (`|`) at the top level of the pattern.\n //\n return new RegExp(\"^(\".concat(leadingDigitsPattern, \")\")).test(leadingDigits);\n }\n }, {\n key: \"getFormatFormat\",\n value: function getFormatFormat(format, international) {\n return international ? format.internationalFormat() : format.format();\n }\n }, {\n key: \"chooseFormat\",\n value: function chooseFormat(state) {\n var _this3 = this;\n var _loop = function _loop() {\n var format = _step2.value;\n // If this format is currently being used\n // and is still suitable, then stick to it.\n if (_this3.chosenFormat === format) {\n return 0; // break\n }\n // Sometimes, a formatting rule inserts additional digits in a phone number,\n // and \"as you type\" formatter can't do that: it should only use the digits\n // that the user has input.\n //\n // For example, in Argentina, there's a format for mobile phone numbers:\n //\n // {\n // \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n // \"leading_digits_patterns\": [\"91\"],\n // \"national_prefix_formatting_rule\": \"0$1\",\n // \"format\": \"$2 15-$3-$4\",\n // \"international_format\": \"$1 $2 $3-$4\"\n // }\n //\n // In that format, `international_format` is used instead of `format`\n // because `format` inserts `15` in the formatted number,\n // and `AsYouType` formatter should only use the digits\n // the user has actually input, without adding any extra digits.\n // In this case, it wouldn't make a difference, because the `15`\n // is first stripped when applying `national_prefix_for_parsing`\n // and then re-added when using `format`, so in reality it doesn't\n // add any new digits to the number, but to detect that, the code\n // would have to be more complex: it would have to try formatting\n // the digits using the format and then see if any digits have\n // actually been added or removed, and then, every time a new digit\n // is input, it should re-check whether the chosen format doesn't\n // alter the digits.\n //\n // Google's code doesn't go that far, and so does this library:\n // it simply requires that a `format` doesn't add any additonal\n // digits to user's input.\n //\n // Also, people in general should move from inputting phone numbers\n // in national format (possibly with national prefixes)\n // and use international phone number format instead:\n // it's a logical thing in the modern age of mobile phones,\n // globalization and the internet.\n //\n /* istanbul ignore if */\n if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n return 1; // continue\n }\n if (!_this3.createTemplateForFormat(format, state)) {\n // Remove the format if it can't generate a template.\n _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {\n return _ !== format;\n });\n return 1; // continue\n }\n _this3.chosenFormat = format;\n return 0; // break\n },\n _ret;\n // When there are multiple available formats, the formatter uses the first\n // format where a formatting template could be created.\n //\n // For some weird reason, `istanbul` says \"else path not taken\"\n // for the `for of` line below. Supposedly that means that\n // the loop doesn't ever go over the last element in the list.\n // That's true because there always is `this.chosenFormat`\n // when `this.matchingFormats` is non-empty.\n // And, for some weird reason, it doesn't think that the case\n // with empty `this.matchingFormats` qualifies for a valid \"else\" path.\n // So simply muting this `istanbul` warning.\n // It doesn't skip the contents of the `for of` loop,\n // it just skips the `for of` line.\n //\n /* istanbul ignore next */\n for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n _ret = _loop();\n if (_ret === 0) break;\n if (_ret === 1) continue;\n }\n if (!this.chosenFormat) {\n // No format matches the national (significant) phone number.\n this.resetFormat();\n }\n return this.chosenFormat;\n }\n }, {\n key: \"createTemplateForFormat\",\n value: function createTemplateForFormat(format, state) {\n // The formatter doesn't format numbers when numberPattern contains '|', e.g.\n // (20|3)\\d{4}. In those cases we quickly return.\n // (Though there's no such format in current metadata)\n /* istanbul ignore if */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n return;\n }\n // Get formatting template for this phone number format\n var template = this.getTemplateForFormat(format, state);\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (template) {\n this.setNationalNumberTemplate(template, state);\n return true;\n }\n }\n }, {\n key: \"getSeparatorAfterNationalPrefix\",\n value: function getSeparatorAfterNationalPrefix(format) {\n // `US` metadata doesn't have a `national_prefix_formatting_rule`,\n // so the `if` condition below doesn't apply to `US`,\n // but in reality there shoudl be a separator\n // between a national prefix and a national (significant) number.\n // So `US` national prefix separator is a \"special\" \"hardcoded\" case.\n if (this.isNANP) {\n return ' ';\n }\n // If a `format` has a `national_prefix_formatting_rule`\n // and that rule has a separator after a national prefix,\n // then it means that there should be a separator\n // between a national prefix and a national (significant) number.\n if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n return ' ';\n }\n // At this point, there seems to be no clear evidence that\n // there should be a separator between a national prefix\n // and a national (significant) number. So don't insert one.\n return '';\n }\n }, {\n key: \"getInternationalPrefixBeforeCountryCallingCode\",\n value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n var IDDPrefix = _ref3.IDDPrefix,\n missingPlus = _ref3.missingPlus;\n if (IDDPrefix) {\n return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n }\n if (missingPlus) {\n return '';\n }\n return '+';\n }\n }, {\n key: \"getTemplate\",\n value: function getTemplate(state) {\n if (!this.template) {\n return;\n }\n // `this.template` holds the template for a \"complete\" phone number.\n // The currently entered phone number is most likely not \"complete\",\n // so trim all non-populated digits.\n var index = -1;\n var i = 0;\n var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n spacing: false\n }) : '';\n while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n index = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1);\n i++;\n }\n return cutAndStripNonPairedParens(this.template, index + 1);\n }\n }, {\n key: \"setNationalNumberTemplate\",\n value: function setNationalNumberTemplate(template, state) {\n this.nationalNumberTemplate = template;\n this.populatedNationalNumberTemplate = template;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = -1;\n // For convenience, the public `.template` property\n // contains the whole international number\n // if the phone number being input is international:\n // 'x' for the '+' sign, 'x'es for the country phone code,\n // a spacebar and then the template for the formatted national number.\n if (state.international) {\n this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) + repeat(DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n } else {\n this.template = template;\n }\n }\n\n /**\r\n * Generates formatting template for a national phone number,\r\n * optionally containing a national prefix, for a format.\r\n * @param {Format} format\r\n * @param {string} nationalPrefix\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplateForFormat\",\n value: function getTemplateForFormat(format, _ref4) {\n var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n international = _ref4.international,\n nationalPrefix = _ref4.nationalPrefix,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n var pattern = format.pattern();\n\n /* istanbul ignore else */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n pattern = pattern\n // Replace anything in the form of [..] with \\d\n .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\n // Replace any standalone digit (not the one in `{}`) with \\d\n .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n }\n\n // Generate a dummy national number (consisting of `9`s)\n // that fits this format's `pattern`.\n //\n // This match will always succeed,\n // because the \"longest dummy phone number\"\n // has enough length to accomodate any possible\n // national phone number format pattern.\n //\n var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];\n\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (nationalSignificantNumber.length > digits.length) {\n return;\n }\n\n // Get a formatting template which can be used to efficiently format\n // a partial number where digits are added one by one.\n\n // Below `strictPattern` is used for the\n // regular expression (with `^` and `$`).\n // This wasn't originally in Google's `libphonenumber`\n // and I guess they don't really need it\n // because they're not using \"templates\" to format phone numbers\n // but I added `strictPattern` after encountering\n // South Korean phone number formatting bug.\n //\n // Non-strict regular expression bug demonstration:\n //\n // this.nationalSignificantNumber : `111111111` (9 digits)\n //\n // pattern : (\\d{2})(\\d{3,4})(\\d{4})\n // format : `$1 $2 $3`\n // digits : `9999999999` (10 digits)\n //\n // '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\n //\n // template : xx xxxx xxxx\n //\n // But the correct template in this case is `xx xxx xxxx`.\n // The template was generated incorrectly because of the\n // `{3,4}` variability in the `pattern`.\n //\n // The fix is, if `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then `this.nationalSignificantNumber`\n // is used instead of `digits`.\n\n var strictPattern = new RegExp('^' + pattern + '$');\n var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT);\n\n // If `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then use it\n // instead of `digits`.\n if (strictPattern.test(nationalNumberDummyDigits)) {\n digits = nationalNumberDummyDigits;\n }\n var numberFormat = this.getFormatFormat(format, international);\n var nationalPrefixIncludedInTemplate;\n\n // If a user did input a national prefix (and that's guaranteed),\n // and if a `format` does have a national prefix formatting rule,\n // then see if that national prefix formatting rule\n // prepends exactly the same national prefix the user has input.\n // If that's the case, then use the `format` with the national prefix formatting rule.\n // Otherwise, use the `format` without the national prefix formatting rule,\n // and prepend a national prefix manually to it.\n if (this.shouldTryNationalPrefixFormattingRule(format, {\n international: international,\n nationalPrefix: nationalPrefix\n })) {\n var numberFormatWithNationalPrefix = numberFormat.replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n // If `national_prefix_formatting_rule` of a `format` simply prepends\n // national prefix at the start of a national (significant) number,\n // then such formatting can be used with `AsYouType` formatter.\n // There seems to be no `else` case: everywhere in metadata,\n // national prefix formatting rule is national prefix + $1,\n // or `($1)`, in which case such format isn't even considered\n // when the user has input a national prefix.\n /* istanbul ignore else */\n if (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\n numberFormat = numberFormatWithNationalPrefix;\n nationalPrefixIncludedInTemplate = true;\n // Replace all digits of the national prefix in the formatting template\n // with `DIGIT_PLACEHOLDER`s.\n if (nationalPrefix) {\n var i = nationalPrefix.length;\n while (i > 0) {\n numberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER);\n i--;\n }\n }\n }\n }\n\n // Generate formatting template for this phone number format.\n var template = digits\n // Format the dummy phone number according to the format.\n .replace(new RegExp(pattern), numberFormat)\n // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n .replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER);\n\n // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then just prepend such prefix\n // before the national (significant) number, optionally spacing\n // the two with a whitespace.\n if (!nationalPrefixIncludedInTemplate) {\n if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n // Prepend the prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;\n } else if (nationalPrefix) {\n // Prepend national prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n }\n }\n if (international) {\n template = applyInternationalSeparatorStyle(template);\n }\n return template;\n }\n }, {\n key: \"formatNextNationalNumberDigits\",\n value: function formatNextNationalNumberDigits(digits) {\n var result = populateTemplateWithDigits(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n if (!result) {\n // Reset the format.\n this.resetFormat();\n return;\n }\n this.populatedNationalNumberTemplate = result[0];\n this.populatedNationalNumberTemplatePosition = result[1];\n\n // Return the formatted phone number so far.\n return cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);\n\n // The old way which was good for `input-format` but is not so good\n // for `react-phone-number-input`'s default input (`InputBasic`).\n // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\n // \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\n }\n }, {\n key: \"shouldTryNationalPrefixFormattingRule\",\n value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {\n var international = _ref5.international,\n nationalPrefix = _ref5.nationalPrefix;\n if (format.nationalPrefixFormattingRule()) {\n // In some countries, `national_prefix_formatting_rule` is `($1)`,\n // so it applies even if the user hasn't input a national prefix.\n // `format.usesNationalPrefix()` detects such cases.\n var usesNationalPrefix = format.usesNationalPrefix();\n if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n return true;\n }\n }\n }\n }]);\n}();\nexport { AsYouTypeFormatter as default };\n//# sourceMappingURL=AsYouTypeFormatter.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport _extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport { VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from './constants.js';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');\nvar VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + PLUS_CHARS + ']' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*' + '|' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + '.*' + '$');\n\n// Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\nvar AsYouTypeParser = /*#__PURE__*/function () {\n function AsYouTypeParser(_ref) {\n var defaultCountry = _ref.defaultCountry,\n defaultCallingCode = _ref.defaultCallingCode,\n metadata = _ref.metadata,\n onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;\n _classCallCheck(this, AsYouTypeParser);\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.metadata = metadata;\n this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n }\n return _createClass(AsYouTypeParser, [{\n key: \"input\",\n value: function input(text, state) {\n var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),\n formattedDigits = _extractFormattedDigi2[0],\n hasPlus = _extractFormattedDigi2[1];\n var digits = parseDigits(formattedDigits);\n // Checks for a special case: just a leading `+` has been entered.\n var justLeadingPlus;\n if (hasPlus) {\n if (!state.digits) {\n state.startInternationalNumber(undefined, undefined);\n if (!digits) {\n justLeadingPlus = true;\n }\n }\n }\n if (digits) {\n this.inputDigits(digits, state);\n }\n return {\n digits: digits,\n justLeadingPlus: justLeadingPlus\n };\n }\n\n /**\r\n * Inputs \"next\" phone number digits.\r\n * @param {string} digits\r\n * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n */\n }, {\n key: \"inputDigits\",\n value: function inputDigits(nextDigits, state) {\n var digits = state.digits;\n var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;\n\n // Append phone number digits.\n state.appendDigits(nextDigits);\n\n // Attempt to extract IDD prefix:\n // Some users input their phone number in international format,\n // but in an \"out-of-country\" dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers as soon as there're at least 3 digits.\n // Google's library attempts to extract IDD prefix at 3 digits,\n // so this library just copies that behavior.\n // I guess that's because the most commot IDD prefixes are\n // `00` (Europe) and `011` (US).\n // There exist really long IDD prefixes too:\n // for example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n // An IDD prefix is extracted here, and then every time when\n // there's a new digit and the number couldn't be formatted.\n if (hasReceivedThreeLeadingDigits) {\n this.extractIddPrefix(state);\n }\n if (this.isWaitingForCountryCallingCode(state)) {\n if (!this.extractCountryCallingCode(state)) {\n return;\n }\n } else {\n state.appendNationalSignificantNumberDigits(nextDigits);\n }\n\n // If a phone number is being input in international format,\n // then it's not valid for it to have a national prefix.\n // Still, some people incorrectly input such numbers with a national prefix.\n // In such cases, only attempt to strip a national prefix if the number becomes too long.\n // (but that is done later, not here)\n if (!state.international) {\n if (!this.hasExtractedNationalSignificantNumber) {\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }\n }, {\n key: \"isWaitingForCountryCallingCode\",\n value: function isWaitingForCountryCallingCode(_ref2) {\n var international = _ref2.international,\n callingCode = _ref2.callingCode;\n return international && !callingCode;\n }\n\n // Extracts a country calling code from a number\n // being entered in internatonal format.\n }, {\n key: \"extractCountryCallingCode\",\n value: function extractCountryCallingCode(state) {\n var _extractCountryCallin = _extractCountryCallingCode('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n if (countryCallingCode) {\n state.setCallingCode(countryCallingCode);\n state.update({\n nationalSignificantNumber: number\n });\n return true;\n }\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan) {\n if (numberingPlan) {\n this.hasSelectedNumberingPlan = true;\n var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n } else {\n this.hasSelectedNumberingPlan = undefined;\n this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n }\n }\n\n /**\r\n * Extracts a national (significant) number from user input.\r\n * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n * and doesn't apply `national_prefix_transform_rule` after that.\r\n * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n * @return {boolean} [extracted]\r\n */\n }, {\n key: \"extractNationalSignificantNumber\",\n value: function extractNationalSignificantNumber(nationalDigits, setState) {\n if (!this.hasSelectedNumberingPlan) {\n return;\n }\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe.nationalPrefix,\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n if (nationalNumber === nationalDigits) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n\n /**\r\n * In Google's code this function is called \"attempt to extract longer NDD\".\r\n * \"Some national prefixes are a substring of others\", they say.\r\n * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n */\n }, {\n key: \"extractAnotherNationalSignificantNumber\",\n value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n if (!this.hasExtractedNationalSignificantNumber) {\n return this.extractNationalSignificantNumber(nationalDigits, setState);\n }\n if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n return;\n }\n var _extractNationalNumbe2 = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n nationalNumber = _extractNationalNumbe2.nationalNumber,\n carrierCode = _extractNationalNumbe2.carrierCode;\n // If a national prefix has been extracted previously,\n // then it's always extracted as additional digits are added.\n // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\n // doesn't do anything different from what it currently does.\n // So, just in case, here's this check, though it doesn't occur.\n /* istanbul ignore if */\n if (nationalNumber === prevNationalSignificantNumber) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n }, {\n key: \"onExtractedNationalNumber\",\n value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {\n // Tells if the parsed national (significant) number is present as-is in the input string.\n // For example, when inputting \"0343515551212999\" Argentinian mobile number,\n // the parsed national (significant) number is \"93435551212999\".\n // There, one can see how it stripped \"0\" national prefix and prepended a \"9\",\n // because that's how it is instructed to do in Argentina's metadata.\n // So in the described example, the parsed national (significant) number is not present\n // as-is in the input string. Instead, it's \"modified\" in the input string.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var nationalSignificantNumberIsModified = false;\n\n // In some countries, a phone number could have a prefix that is not a \"national prefix\"\n // but rather some other type of \"utility\" prefix.\n // For example, when calling within Australia, one could prepend `1831` prefix to hide\n // caller's phone number.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n\n // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.\n var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);\n\n // If the parsed national (significant) number is the last substring of the `nationalDigits`,\n // then it means that it's present as-is in the input string.\n // In any other case, the parsed national (significant) number is \"modified\" in the input string.\n if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {\n nationalSignificantNumberIsModified = true;\n } else {\n var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);\n // When national (significant) number is equal to the `nationalDigits`,\n // this `onExtractedNationalNumber()` function simply doesn't get called.\n // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.\n // Still, added this `if` check just to prevent potential silly bugs.\n // The `!prefixBeforeNationalNumber` case is not really testable\n // so this line is exluded from the code coverage.\n /* istanbul ignore if */\n if (prefixBeforeNationalNumber) {\n if (prefixBeforeNationalNumber !== nationalPrefix) {\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;\n }\n }\n }\n setState({\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode,\n nationalSignificantNumber: nationalSignificantNumber,\n nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix\n });\n // `onExtractedNationalNumber()` is only called when\n // the national (significant) number actually did change.\n this.hasExtractedNationalSignificantNumber = true;\n this.onNationalSignificantNumberChange();\n }\n }, {\n key: \"reExtractNationalSignificantNumber\",\n value: function reExtractNationalSignificantNumber(state) {\n // Attempt to extract a national prefix.\n //\n // Some people incorrectly input national prefix\n // in an international phone number.\n // For example, some people write British phone numbers as `+44(0)...`.\n //\n // Also, in some rare cases, it is valid for a national prefix\n // to be a part of an international phone number.\n // For example, mobile phone numbers in Mexico are supposed to be\n // dialled internationally using a `1` national prefix,\n // so the national prefix will be part of an international number.\n //\n // Quote from:\n // https://www.mexperience.com/dialing-cell-phones-in-mexico/\n //\n // \"Dialing a Mexican cell phone from abroad\n // When you are calling a cell phone number in Mexico from outside Mexico,\n // it’s necessary to dial an additional “1” after Mexico’s country code\n // (which is “52”) and before the area code.\n // You also ignore the 045, and simply dial the area code and the\n // cell phone’s number.\n //\n // If you don’t add the “1”, you’ll receive a recorded announcement\n // asking you to redial using it.\n //\n // For example, if you are calling from the USA to a cell phone\n // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\n // (Note that this is different to calling a land line in Mexico City\n // from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\n //\n // Google's demo output:\n // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\n //\n if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {\n return state.update(stateUpdate);\n })) {\n return true;\n }\n // If no format matches the phone number, then it could be\n // \"a really long IDD\" (quote from a comment in Google's library).\n // An IDD prefix is first extracted when the user has entered at least 3 digits,\n // and then here — every time when there's a new digit and the number\n // couldn't be formatted.\n // For example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n //\n // Could also check `!hasReceivedThreeLeadingDigits` here\n // to filter out the case when this check duplicates the one\n // already performed when there're 3 leading digits,\n // but it's not a big deal, and in most cases there\n // will be a suitable `format` when there're 3 leading digits.\n //\n if (this.extractIddPrefix(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n // Google's AsYouType formatter supports sort of an \"autocorrection\" feature\n // when it \"autocorrects\" numbers that have been input for a country\n // with that country's calling code.\n // Such \"autocorrection\" feature looks weird, but different people have been requesting it:\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n // https://github.com/catamphetamine/libphonenumber-js/issues/375\n // https://github.com/catamphetamine/libphonenumber-js/issues/316\n if (this.fixMissingPlus(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n }\n }, {\n key: \"extractIddPrefix\",\n value: function extractIddPrefix(state) {\n // An IDD prefix can't be present in a number written with a `+`.\n // Also, don't re-extract an IDD prefix if has already been extracted.\n var international = state.international,\n IDDPrefix = state.IDDPrefix,\n digits = state.digits,\n nationalSignificantNumber = state.nationalSignificantNumber;\n if (international || IDDPrefix) {\n return;\n }\n // Some users input their phone number in \"out-of-country\"\n // dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers.\n var numberWithoutIDD = stripIddPrefix(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\n if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\n // If an IDD prefix was stripped then convert the IDD-prefixed number\n // to international number for subsequent parsing.\n state.update({\n IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\n });\n this.startInternationalNumber(state, {\n country: undefined,\n callingCode: undefined\n });\n return true;\n }\n }\n }, {\n key: \"fixMissingPlus\",\n value: function fixMissingPlus(state) {\n if (!state.international) {\n var _extractCountryCallin2 = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n newCallingCode = _extractCountryCallin2.countryCallingCode;\n if (newCallingCode) {\n state.update({\n missingPlus: true\n });\n this.startInternationalNumber(state, {\n country: state.country,\n callingCode: newCallingCode\n });\n return true;\n }\n }\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(state, _ref3) {\n var country = _ref3.country,\n callingCode = _ref3.callingCode;\n state.startInternationalNumber(country, callingCode);\n // If a national (significant) number has been extracted before, reset it.\n if (state.nationalSignificantNumber) {\n state.resetNationalSignificantNumber();\n this.onNationalSignificantNumberChange();\n this.hasExtractedNationalSignificantNumber = undefined;\n }\n }\n }, {\n key: \"extractCallingCodeAndNationalSignificantNumber\",\n value: function extractCallingCodeAndNationalSignificantNumber(state) {\n if (this.extractCountryCallingCode(state)) {\n // `this.extractCallingCode()` is currently called when the number\n // couldn't be formatted during the standard procedure.\n // Normally, the national prefix would be re-extracted\n // for an international number if such number couldn't be formatted,\n // but since it's already not able to be formatted,\n // there won't be yet another retry, so also extract national prefix here.\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }]);\n}();\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\nexport { AsYouTypeParser as default };\nfunction extractFormattedPhoneNumber(text) {\n // Attempt to extract a possible number from the string passed in.\n var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);\n if (startsAt < 0) {\n return;\n }\n // Trim everything to the left of the phone number.\n text = text.slice(startsAt);\n // Trim the `+`.\n var hasPlus;\n if (text[0] === '+') {\n hasPlus = true;\n text = text.slice('+'.length);\n }\n // Trim everything to the right of the phone number.\n text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');\n // Re-add the previously trimmed `+`.\n if (hasPlus) {\n text = '+' + text;\n }\n return text;\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nfunction _extractFormattedDigitsAndPlus(text) {\n // Extract a formatted phone number part from text.\n var extractedNumber = extractFormattedPhoneNumber(text) || '';\n // Trim a `+`.\n if (extractedNumber[0] === '+') {\n return [extractedNumber.slice('+'.length), true];\n }\n return [extractedNumber];\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nexport function extractFormattedDigitsAndPlus(text) {\n var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n formattedDigits = _extractFormattedDigi4[0],\n hasPlus = _extractFormattedDigi4[1];\n // If the extracted phone number part\n // can possibly be a part of some valid phone number\n // then parse phone number characters from a formatted phone number.\n if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n formattedDigits = '';\n }\n return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata from './metadata.js';\nimport PhoneNumber from './PhoneNumber.js';\nimport AsYouTypeState from './AsYouTypeState.js';\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.js';\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport getCountryByNationalNumber from './helpers/getCountryByNationalNumber.js';\nimport isObject from './helpers/isObject.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar AsYouType = /*#__PURE__*/function () {\n /**\r\n * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n * @param {Object} metadata\r\n */\n function AsYouType(optionsOrDefaultCountry, metadata) {\n _classCallCheck(this, AsYouType);\n this.metadata = new Metadata(metadata);\n var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),\n _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),\n defaultCountry = _this$getCountryAndCa2[0],\n defaultCallingCode = _this$getCountryAndCa2[1];\n // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync.\n // For example, `this.defaultCountry` could be `\"AR\"` and `this.defaultCallingCode` could be `undefined`.\n // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent.\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.reset();\n }\n return _createClass(AsYouType, [{\n key: \"getCountryAndCallingCode\",\n value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n // Set `defaultCountry` and `defaultCallingCode` options.\n var defaultCountry;\n var defaultCallingCode;\n // Turns out `null` also has type \"object\". Weird.\n if (optionsOrDefaultCountry) {\n if (isObject(optionsOrDefaultCountry)) {\n defaultCountry = optionsOrDefaultCountry.defaultCountry;\n defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n } else {\n defaultCountry = optionsOrDefaultCountry;\n }\n }\n if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n defaultCountry = undefined;\n }\n if (defaultCallingCode) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n defaultCountry = '001';\n }\n }\n }\n return [defaultCountry, defaultCallingCode];\n }\n\n /**\r\n * Inputs \"next\" phone number characters.\r\n * @param {string} text\r\n * @return {string} Formatted phone number characters that have been input so far.\r\n */\n }, {\n key: \"input\",\n value: function input(text) {\n var _this$parser$input = this.parser.input(text, this.state),\n digits = _this$parser$input.digits,\n justLeadingPlus = _this$parser$input.justLeadingPlus;\n if (justLeadingPlus) {\n this.formattedOutput = '+';\n } else if (digits) {\n this.determineTheCountryIfNeeded();\n // Match the available formats by the currently available leading digits.\n if (this.state.nationalSignificantNumber) {\n this.formatter.narrowDownMatchingFormats(this.state);\n }\n var formattedNationalNumber;\n if (this.metadata.hasSelectedNumberingPlan()) {\n formattedNationalNumber = this.formatter.format(digits, this.state);\n }\n if (formattedNationalNumber === undefined) {\n // See if another national (significant) number could be re-extracted.\n if (this.parser.reExtractNationalSignificantNumber(this.state)) {\n this.determineTheCountryIfNeeded();\n // If it could, then re-try formatting the new national (significant) number.\n var nationalDigits = this.state.getNationalDigits();\n if (nationalDigits) {\n formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n }\n }\n }\n this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n }\n return this.formattedOutput;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var _this = this;\n this.state = new AsYouTypeState({\n onCountryChange: function onCountryChange(country) {\n // Before version `1.6.0`, the official `AsYouType` formatter API\n // included a `.country` property on an `AsYouType` instance.\n // Since that property (along with the others) have been moved to\n // `this.state`, `this.country` property is emulated for compatibility\n // with the old versions.\n _this.country = country;\n },\n onCallingCodeChange: function onCallingCodeChange(callingCode, country) {\n _this.metadata.selectNumberingPlan(country, callingCode);\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n _this.parser.reset(_this.metadata.numberingPlan);\n }\n });\n this.formatter = new AsYouTypeFormatter({\n state: this.state,\n metadata: this.metadata\n });\n this.parser = new AsYouTypeParser({\n defaultCountry: this.defaultCountry,\n defaultCallingCode: this.defaultCallingCode,\n metadata: this.metadata,\n state: this.state,\n onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n _this.determineTheCountryIfNeeded();\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n }\n });\n this.state.reset({\n country: this.defaultCountry,\n callingCode: this.defaultCallingCode\n });\n this.formattedOutput = '';\n return this;\n }\n\n /**\r\n * Returns `true` if the phone number is being input in international format.\r\n * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isInternational\",\n value: function isInternational() {\n return this.state.international;\n }\n\n /**\r\n * Returns the \"calling code\" part of the phone number when it's being input\r\n * in an international format.\r\n * If no valid calling code has been entered so far, returns `undefined`.\r\n * @return {string} [callingCode]\r\n */\n }, {\n key: \"getCallingCode\",\n value: function getCallingCode() {\n // If the number is being input in national format and some \"default calling code\"\n // has been passed to `AsYouType` constructor, then `this.state.callingCode`\n // is equal to that \"default calling code\".\n //\n // If the number is being input in national format and no \"default calling code\"\n // has been passed to `AsYouType` constructor, then returns `undefined`,\n // even if a \"default country\" has been passed to `AsYouType` constructor.\n //\n if (this.isInternational()) {\n return this.state.callingCode;\n }\n }\n\n // A legacy alias.\n }, {\n key: \"getCountryCallingCode\",\n value: function getCountryCallingCode() {\n return this.getCallingCode();\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * Returns `undefined` if no phone number has been input yet.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"getCountry\",\n value: function getCountry() {\n var digits = this.state.digits;\n // Return `undefined` if no digits have been input yet.\n if (digits) {\n return this._getCountry();\n }\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"_getCountry\",\n value: function _getCountry() {\n var country = this.state.country;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n // `AsYouType.getCountry()` returns `undefined`\n // for \"non-geographic\" phone numbering plans.\n if (country === '001') {\n return;\n }\n }\n return country;\n }\n }, {\n key: \"determineTheCountryIfNeeded\",\n value: function determineTheCountryIfNeeded() {\n // Suppose a user enters a phone number in international format,\n // and there're several countries corresponding to that country calling code,\n // and a country has been derived from the number, and then\n // a user enters one more digit and the number is no longer\n // valid for the derived country, so the country should be re-derived\n // on every new digit in those cases.\n //\n // If the phone number is being input in national format,\n // then it could be a case when `defaultCountry` wasn't specified\n // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\n // and that \"calling code\" could correspond to a \"non-geographic entity\",\n // or there could be several countries corresponding to that country calling code.\n // In those cases, `this.country` is `undefined` and should be derived\n // from the number. Again, if country calling code is ambiguous, then\n // `this.country` should be re-derived with each new digit.\n //\n if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\n this.determineTheCountry();\n }\n }\n\n // Prepends `+CountryCode ` in case of an international phone number\n }, {\n key: \"getFullNumber\",\n value: function getFullNumber(formattedNationalNumber) {\n var _this2 = this;\n if (this.isInternational()) {\n var prefix = function prefix(text) {\n return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {\n spacing: text ? true : false\n }) + text;\n };\n var callingCode = this.state.callingCode;\n if (!callingCode) {\n return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n }\n if (!formattedNationalNumber) {\n return prefix(callingCode);\n }\n return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\n }\n return formattedNationalNumber;\n }\n }, {\n key: \"getNonFormattedNationalNumberWithPrefix\",\n value: function getNonFormattedNationalNumberWithPrefix() {\n var _this$state = this.state,\n nationalSignificantNumber = _this$state.nationalSignificantNumber,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,\n nationalPrefix = _this$state.nationalPrefix;\n var number = nationalSignificantNumber;\n var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;\n if (prefix) {\n number = prefix + number;\n }\n return number;\n }\n }, {\n key: \"getNonFormattedNumber\",\n value: function getNonFormattedNumber() {\n var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;\n return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());\n }\n }, {\n key: \"getNonFormattedTemplate\",\n value: function getNonFormattedTemplate() {\n var number = this.getNonFormattedNumber();\n if (number) {\n return number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER);\n }\n }\n }, {\n key: \"isCountryCallingCodeAmbiguous\",\n value: function isCountryCallingCodeAmbiguous() {\n var callingCode = this.state.callingCode;\n var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);\n return countryCodes && countryCodes.length > 1;\n }\n\n // Determines the exact country of the phone number\n // entered so far based on the country phone code\n // and the national phone number.\n }, {\n key: \"determineTheCountry\",\n value: function determineTheCountry() {\n this.state.setCountry(getCountryByCallingCode(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n nationalNumber: this.state.nationalSignificantNumber,\n metadata: this.metadata\n }));\n }\n\n /**\r\n * Returns a E.164 phone number value for the user's input.\r\n *\r\n * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n * it will return `\"+12223334444\"`.\r\n *\r\n * For international phone number input, it will also auto-correct\r\n * some minor errors such as using a national prefix when writing\r\n * an international phone number. For example, if the user inputs\r\n * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n * `\"+447400000000\"` phone number value.\r\n *\r\n * Will return `undefined` if no digits have been input,\r\n * or when inputting a phone number in national format and no\r\n * default country or default \"country calling code\" have been set.\r\n *\r\n * @return {string} [value]\r\n */\n }, {\n key: \"getNumberValue\",\n value: function getNumberValue() {\n var _this$state2 = this.state,\n digits = _this$state2.digits,\n callingCode = _this$state2.callingCode,\n country = _this$state2.country,\n nationalSignificantNumber = _this$state2.nationalSignificantNumber;\n\n // Will return `undefined` if no digits have been input.\n if (!digits) {\n return;\n }\n if (this.isInternational()) {\n if (callingCode) {\n return '+' + callingCode + nationalSignificantNumber;\n } else {\n return '+' + digits;\n }\n } else {\n if (country || callingCode) {\n var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;\n return '+' + callingCode_ + nationalSignificantNumber;\n }\n }\n }\n\n /**\r\n * Returns an instance of `PhoneNumber` class.\r\n * Will return `undefined` if no national (significant) number\r\n * digits have been entered so far, or if no `defaultCountry` has been\r\n * set and the user enters a phone number not in international format.\r\n */\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var _this$state3 = this.state,\n nationalSignificantNumber = _this$state3.nationalSignificantNumber,\n carrierCode = _this$state3.carrierCode,\n callingCode = _this$state3.callingCode;\n\n // `this._getCountry()` is basically same as `this.state.country`\n // with the only change that it return `undefined` in case of a\n // \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\n var country = this._getCountry();\n if (!nationalSignificantNumber) {\n return;\n }\n\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `country` could be `\"AR\"` and `callingCode` could be `undefined`.\n // So `country` and `callingCode` are totally independent.\n\n if (!country && !callingCode) {\n return;\n }\n\n // By default, if `defaultCountry` parameter was passed when\n // creating `AsYouType` instance, `state.country` is gonna be\n // that `defaultCountry`, which doesn't entirely conform with\n // `parsePhoneNumber()`'s behavior where it attempts to determine\n // the country more precisely in cases when multiple countries\n // could correspond to the same `countryCallingCode`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969\n //\n // Because `AsYouType.getNumber()` method is supposed to be a 1:1\n // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`,\n // then it should also behave accordingly in cases of `country` ambiguity.\n // That's how users of this library would expect it to behave anyway.\n //\n if (country) {\n if (country === this.defaultCountry) {\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `state.country` could be `\"AR\"` and `state.callingCode` could be `undefined`.\n // So `state.country` and `state.callingCode` are totally independent.\n var metadata = new Metadata(this.metadata.metadata);\n metadata.selectNumberingPlan(country);\n var _callingCode = metadata.numberingPlan.callingCode();\n var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n if (ambiguousCountries.length > 1) {\n var exactCountry = getCountryByNationalNumber(nationalSignificantNumber, {\n countries: ambiguousCountries,\n metadata: this.metadata.metadata\n });\n if (exactCountry) {\n country = exactCountry;\n }\n }\n }\n }\n var phoneNumber = new PhoneNumber(country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n // Phone number extensions are not supported by \"As You Type\" formatter.\n return phoneNumber;\n }\n\n /**\r\n * Returns `true` if the phone number is \"possible\".\r\n * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isPossible();\n }\n\n /**\r\n * Returns `true` if the phone number is \"valid\".\r\n * Is just a shortcut for `PhoneNumber.isValid()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isValid\",\n value: function isValid() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isValid();\n }\n\n /**\r\n * @deprecated\r\n * This method is used in `react-phone-number-input/source/input-control.js`\r\n * in versions before `3.0.16`.\r\n */\n }, {\n key: \"getNationalNumber\",\n value: function getNationalNumber() {\n return this.state.nationalSignificantNumber;\n }\n\n /**\r\n * Returns the phone number characters entered by the user.\r\n * @return {string}\r\n */\n }, {\n key: \"getChars\",\n value: function getChars() {\n return (this.state.international ? '+' : '') + this.state.digits;\n }\n\n /**\r\n * Returns the template for the formatted phone number.\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplate\",\n value: function getTemplate() {\n return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n }\n }]);\n}();\nexport { AsYouType as default };\n//# sourceMappingURL=AsYouType.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nimport { AsYouType as _AsYouType } from '../../core/index.js'\r\n\r\nexport function AsYouType(country) {\r\n\treturn _AsYouType.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(_AsYouType.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","_defineProperties","e","r","t","length","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","i","toPrimitive","call","TypeError","String","Number","_toPrimitive","AsYouTypeState","_ref","onCountryChange","onCallingCodeChange","a","n","_classCallCheck","this","value","_ref2","country","callingCode","international","missingPlus","IDDPrefix","undefined","digits","resetNationalSignificantNumber","initCountryAndCallingCode","nationalSignificantNumber","getNationalDigits","nationalSignificantNumberIsModified","nationalPrefix","carrierCode","prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix","properties","_i","_Object$keys","keys","setCountry","setCallingCode","nextDigits","slice","_createForOfIteratorHelperLoose","next","bind","Array","isArray","_arrayLikeToArray","toString","name","from","test","_unsupportedIterableToArray","done","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","RegExp","repeat","string","times","result","cutAndStripNonPairedParens","cutBeforeIndex","dangling_braces","push","pop","start","cleared_string","_dangling_braces","index","stripNonPairedParens","formatCompleteNumber","state","format","metadata","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","concat","pattern","formattedNumber","formatNationalNumber","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","_ref3","formattedNationalNumber","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","parseDigits","isValidFormattedNationalNumber","PatternParser","context","or","instructions","parsePattern","Error","_this$context$","branches","op","args","expandSingleElementArray","match","OPERATOR","operator","before","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","ILLEGAL_CHARACTER_REGEXP","split","values","prevValue","charCodeAt","nextValue","fromCharCode","array","PatternMatcher","matchTree","parse","allowOverflow","arguments","_match","matchedChars","overflow","characters","tree","last","characterString","join","indexOf","partialMatch","restCharacters","JSON","stringify","_step","_iterator","_result","_step2","_iterator2","_char","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","resetFormat","chosenFormat","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","numberingPlan","isNANP","matchingFormats","formats","narrowDownMatchingFormats","_this","checkNumberLength","_format","formattedCompleteNumber","setNationalNumberTemplate","replace","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","_this2","leadingDigits","leadingDigitsPatternIndex","filter","formatSuits","formatMatches","usesNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","leadingDigitsPatterns","Math","min","leadingDigitsPattern","error","console","internationalFormat","_this3","_loop","getFormatFormat","createTemplateForFormat","_","getTemplateForFormat","nationalPrefixFormattingRule","options","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","_ref4","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","applyInternationalSeparatorStyle","position","digit","search","populateTemplateWithDigits","_ref5","_slicedToArray","_arrayWithHoles","l","u","f","_iterableToArrayLimit","_nonIterableRest","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","defaultCountry","defaultCallingCode","onNationalSignificantNumberChange","text","justLeadingPlus","_extractFormattedDigi","_extractFormattedDigi3","extractedNumber","hasPlus","startsAt","extractFormattedPhoneNumber","_extractFormattedDigitsAndPlus","_extractFormattedDigi4","formattedDigits","extractFormattedDigitsAndPlus","_extractFormattedDigi2","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","extractCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","stateUpdate","update","_extractCountryCallin","countryCallingCode","number","hasSelectedNumberingPlan","nationalPrefixForParsing","_nationalPrefixForParsing","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","setState","_extractNationalNumbe","extractNationalNumberFromPossiblyIncompleteNumber","nationalNumber","onExtractedNationalNumber","prevNationalSignificantNumber","_extractNationalNumbe2","nationalSignificantNumberIndex","prefixBeforeNationalNumber","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","numberWithoutIDD","stripIddPrefix","newCallingCode","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","AsYouType","optionsOrDefaultCountry","_this$getCountryAndCa2","getCountryAndCallingCode","reset","isObject","hasCountry","_this$parser$input","parser","input","formattedOutput","determineTheCountryIfNeeded","formatter","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","selectNumberingPlan","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","prefix","_this$state","getNonFormattedNationalNumberWithPrefix","countryCodes","getCountryCodesForCallingCode","getCountryByCallingCode","_this$state2","_this$state3","_callingCode","ambiguousCountries","exactCountry","getCountryByNationalNumber","countries","phoneNumber","PhoneNumber","getNumber","isPossible","isValid","getTemplate","getNonFormattedTemplate","create","getExampleNumber","examples","withMetadataArgument"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/537.prod.js.map b/umd/537.prod.js.map index bb0b4fd2..21f36006 100644 --- a/umd/537.prod.js.map +++ b/umd/537.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"537.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./node_modules/ieee754/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/ebmlID.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/buffer-reader.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js","webpack://tinode-webapp/./node_modules/int64-buffer/int64-buffer.js","webpack://tinode-webapp/./node_modules/ebml-block/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/index.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/vint.js","webpack://tinode-webapp/./node_modules/events/events.js","webpack://tinode-webapp/./node_modules/base64-js/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBML.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js","webpack://tinode-webapp/./node_modules/buffer/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js"],"sourcesContent":["/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","\"use strict\";\n// source: https://www.matroska.org/technical/elements.html\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byEbmlID = void 0;\nexports.byEbmlID = {\n 0x80: {\n name: \"ChapterDisplay\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all possible strings to use for the chapter display.\"\n },\n 0x83: {\n name: \"TrackType\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"1-254\",\n description: \"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).\"\n },\n 0x85: {\n name: \"ChapString\",\n cppname: \"ChapterString\",\n level: 5,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Contains the string to use as the chapter atom.\"\n },\n 0x86: {\n name: \"CodecID\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n description: \"An ID corresponding to the codec, see the codec page for more info.\"\n },\n 0x88: {\n name: \"FlagDefault\",\n cppname: \"TrackFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)\"\n },\n 0x89: {\n name: \"ChapterTrackNumber\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.\"\n },\n 0x91: {\n name: \"ChapterTimeStart\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Timestamp of the start of Chapter (not scaled).\"\n },\n 0x92: {\n name: \"ChapterTimeEnd\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Timestamp of the end of Chapter (timestamp excluded, not scaled).\"\n },\n 0x96: {\n name: \"CueRefTime\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n description: \"Timestamp of the referenced Block.\"\n },\n 0x97: {\n name: \"CueRefCluster\",\n level: 5,\n type: \"u\",\n mandatory: true,\n webm: false,\n description: \"The Position of the Cluster containing the referenced Block.\"\n },\n 0x98: {\n name: \"ChapterFlagHidden\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x4254: {\n name: \"ContentCompAlgo\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\", \"\", \"\" ],\n // \"del\": [ \"1 - bzlib,\", \"2 - lzo1x\" ],\n description: \"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping\"\n },\n 0x4255: {\n name: \"ContentCompSettings\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.\"\n },\n 0x4282: {\n name: \"DocType\",\n level: 1,\n type: \"s\",\n mandatory: true,\n \"default\": \"matroska\",\n minver: 1,\n description: \"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files.\"\n },\n 0x4285: {\n name: \"DocTypeReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum DocType version an interpreter has to support to read this file.\"\n },\n 0x4286: {\n name: \"EBMLVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of EBML parser used to create the file.\"\n },\n 0x4287: {\n name: \"DocTypeVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of DocType interpreter used to create the file.\"\n },\n 0x4444: {\n name: \"SegmentFamily\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A randomly generated unique ID that all segments related to each other must use (128 bits).\"\n },\n 0x4461: {\n name: \"DateUTC\",\n level: 2,\n type: \"d\",\n minver: 1,\n description: \"Date of the origin of timestamp (value 0), i.e. production date.\"\n },\n 0x4484: {\n name: \"TagDefault\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Indication to know if this is the default/original language to use for the given tag. (1 bit)\"\n },\n 0x4485: {\n name: \"TagBinary\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.\"\n },\n 0x4487: {\n name: \"TagString\",\n level: 4,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"The value of the Element.\"\n },\n 0x4489: {\n name: \"Duration\",\n level: 2,\n type: \"f\",\n minver: 1,\n range: \"> 0\",\n description: \"Duration of the segment (based on TimecodeScale).\"\n },\n 0x4598: {\n name: \"ChapterFlagEnabled\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)\"\n },\n 0x4660: {\n name: \"FileMimeType\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"MIME type of the file.\"\n },\n 0x4661: {\n name: \"FileUsedStartTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4662: {\n name: \"FileUsedEndTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4675: {\n name: \"FileReferral\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A binary value that a track/codec can refer to when the attachment is needed.\"\n },\n 0x5031: {\n name: \"ContentEncodingOrder\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.\"\n },\n 0x5032: {\n name: \"ContentEncodingScope\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n // \"br\": [ \"\", \"\", \"\" ],\n description: \"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)\"\n },\n 0x5033: {\n name: \"ContentEncodingType\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption\"\n },\n 0x5034: {\n name: \"ContentCompression\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.\"\n },\n 0x5035: {\n name: \"ContentEncryption\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.\"\n },\n 0x5378: {\n name: \"CueBlockNumber\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the Block in the specified Cluster.\"\n },\n 0x5654: {\n name: \"ChapterStringUID\",\n level: 4,\n type: \"8\",\n mandatory: false,\n minver: 3,\n webm: true,\n description: \"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage.\"\n },\n 0x5741: {\n name: \"WritingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Writing application (\\\"mkvmerge-0.3.3\\\").\"\n },\n 0x5854: {\n name: \"SilentTracks\",\n cppname: \"ClusterSilentTracks\",\n level: 2,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.\"\n },\n 0x6240: {\n name: \"ContentEncoding\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Settings for one content encoding like compression or encryption.\"\n },\n 0x6264: {\n name: \"BitDepth\",\n cppname: \"AudioBitDepth\",\n level: 4,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Bits per sample, mostly used for PCM.\"\n },\n 0x6532: {\n name: \"SignedElement\",\n level: 3,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"An element ID whose data will be used to compute the signature.\"\n },\n 0x6624: {\n name: \"TrackTranslate\",\n level: 3,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The track identification for the given Chapter Codec.\"\n },\n 0x6911: {\n name: \"ChapProcessCommand\",\n cppname: \"ChapterProcessCommand\",\n level: 5,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6922: {\n name: \"ChapProcessTime\",\n cppname: \"ChapterProcessTime\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).\"\n },\n 0x6924: {\n name: \"ChapterTranslate\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"A tuple of corresponding ID used by chapter codecs to represent this segment.\"\n },\n 0x6933: {\n name: \"ChapProcessData\",\n cppname: \"ChapterProcessData\",\n level: 6,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.\"\n },\n 0x6944: {\n name: \"ChapProcess\",\n cppname: \"ChapterProcess\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6955: {\n name: \"ChapProcessCodecID\",\n cppname: \"ChapterProcessCodecID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.\"\n },\n 0x7373: {\n name: \"Tag\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters.\"\n },\n 0x7384: {\n name: \"SegmentFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A filename corresponding to this segment.\"\n },\n 0x7446: {\n name: \"AttachmentLink\",\n cppname: \"TrackAttachmentLink\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The UID of an attachment that is used by this codec.\"\n },\n 0x258688: {\n name: \"CodecName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable string specifying the codec.\"\n },\n 0x18538067: {\n name: \"Segment\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.\"\n },\n 0x447a: {\n name: \"TagLanguage\",\n level: 4,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": \"und\",\n description: \"Specifies the language of the tag specified, in the Matroska languages form.\"\n },\n 0x45a3: {\n name: \"TagName\",\n level: 4,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The name of the Tag that is going to be stored.\"\n },\n 0x67c8: {\n name: \"SimpleTag\",\n cppname: \"TagSimple\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains general information about the target.\"\n },\n 0x63c6: {\n name: \"TagAttachmentUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.\"\n },\n 0x63c4: {\n name: \"TagChapterUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.\"\n },\n 0x63c9: {\n name: \"TagEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.\"\n },\n 0x63c5: {\n name: \"TagTrackUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.\"\n },\n 0x63ca: {\n name: \"TargetType\",\n cppname: \"TagTargetType\",\n level: 4,\n type: \"s\",\n minver: 1,\n webm: false,\n \"strong\": \"informational\",\n description: \"An string that can be used to display the logical level of the target like \\\"ALBUM\\\", \\\"TRACK\\\", \\\"MOVIE\\\", \\\"CHAPTER\\\", etc (see TargetType).\"\n },\n 0x68ca: {\n name: \"TargetTypeValue\",\n cppname: \"TagTargetTypeValue\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 50,\n description: \"A number to indicate the logical level of the target (see TargetType).\"\n },\n 0x63c0: {\n name: \"Targets\",\n cppname: \"TagTargets\",\n level: 3,\n type: \"m\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment.\"\n },\n 0x1254c367: {\n name: \"Tags\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here.\"\n },\n 0x450d: {\n name: \"ChapProcessPrivate\",\n cppname: \"ChapterProcessPrivate\",\n level: 5,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the \\\"DVD level\\\" equivalent.\"\n },\n 0x437e: {\n name: \"ChapCountry\",\n cppname: \"ChapterCountry\",\n level: 5,\n type: \"s\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The countries corresponding to the string, same 2 octets as in Internet domains.\"\n },\n 0x437c: {\n name: \"ChapLanguage\",\n cppname: \"ChapterLanguage\",\n level: 5,\n type: \"s\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n \"default\": \"eng\",\n description: \"The languages corresponding to the string, in the bibliographic ISO-639-2 form.\"\n },\n 0x8f: {\n name: \"ChapterTrack\",\n level: 4,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"List of tracks on which the chapter applies. If this element is not present, all tracks apply\"\n },\n 0x63c3: {\n name: \"ChapterPhysicalEquiv\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Specify the physical equivalent of this ChapterAtom like \\\"DVD\\\" (60) or \\\"SIDE\\\" (50), see complete list of values.\"\n },\n 0x6ebc: {\n name: \"ChapterSegmentEditionUID\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The EditionUID to play from the segment linked in ChapterSegmentUID.\"\n },\n 0x6e67: {\n name: \"ChapterSegmentUID\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \">0\",\n bytesize: 16,\n description: \"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.\"\n },\n 0x73c4: {\n name: \"ChapterUID\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n range: \"not 0\",\n description: \"A unique ID to identify the Chapter.\"\n },\n 0xb6: {\n name: \"ChapterAtom\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains the atom information to use as the chapter atom (apply to all tracks).\"\n },\n 0x45dd: {\n name: \"EditionFlagOrdered\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)\"\n },\n 0x45db: {\n name: \"EditionFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a flag is set (1) the edition should be used as the default one. (1 bit)\"\n },\n 0x45bd: {\n name: \"EditionFlagHidden\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x45bc: {\n name: \"EditionUID\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"A unique ID to identify the edition. It's useful for tagging an edition.\"\n },\n 0x45b9: {\n name: \"EditionEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all information about a segment edition.\"\n },\n 0x1043a770: {\n name: \"Chapters\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: true,\n description: \"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.\"\n },\n 0x46ae: {\n name: \"FileUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"Unique ID representing the file, as random as possible.\"\n },\n 0x465c: {\n name: \"FileData\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The data of the file.\"\n },\n 0x466e: {\n name: \"FileName\",\n level: 3,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Filename of the attached file.\"\n },\n 0x467e: {\n name: \"FileDescription\",\n level: 3,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A human-friendly name for the attached file.\"\n },\n 0x61a7: {\n name: \"AttachedFile\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"An attached file.\"\n },\n 0x1941a469: {\n name: \"Attachments\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain attached files.\"\n },\n 0xeb: {\n name: \"CueRefCodecState\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0x535f: {\n name: \"CueRefNumber\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the referenced Block of Track X in the specified Cluster.\"\n },\n 0xdb: {\n name: \"CueReference\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 2,\n webm: false,\n description: \"The Clusters containing the required referenced Blocks.\"\n },\n 0xea: {\n name: \"CueCodecState\",\n level: 4,\n type: \"u\",\n minver: 2,\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0xb2: {\n name: \"CueDuration\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues.\"\n },\n 0xf0: {\n name: \"CueRelativePosition\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.\",\n position: \"clusterRelative\"\n },\n 0xf1: {\n name: \"CueClusterPosition\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the Cluster containing the required Block.\",\n position: \"segment\",\n },\n 0xf7: {\n name: \"CueTrack\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track for which a position is given.\"\n },\n 0xb7: {\n name: \"CueTrackPositions\",\n level: 3,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contain positions for different tracks corresponding to the timestamp.\"\n },\n 0xb3: {\n name: \"CueTime\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp according to the segment time base.\"\n },\n 0xbb: {\n name: \"CuePoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains all information relative to a seek point in the segment.\"\n },\n 0x1c53bb6b: {\n name: \"Cues\",\n level: 1,\n type: \"m\",\n minver: 1,\n description: \"A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non \\\"live\\\" streams.\"\n },\n 0x47e6: {\n name: \"ContentSigHashAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5\"\n },\n 0x47e5: {\n name: \"ContentSigAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA\"\n },\n 0x47e4: {\n name: \"ContentSigKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"This is the ID of the private key the data was signed with.\"\n },\n 0x47e3: {\n name: \"ContentSignature\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"A cryptographic signature of the contents.\"\n },\n 0x47e2: {\n name: \"ContentEncKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"For public key algorithms this is the ID of the public key the the data was encrypted with.\"\n },\n 0x47e1: {\n name: \"ContentEncAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES\"\n },\n 0x6d80: {\n name: \"ContentEncodings\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings for several content encoding mechanisms like compression or encryption.\"\n },\n 0xc4: {\n name: \"TrickMasterTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc7: {\n name: \"TrickMasterTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc6: {\n name: \"TrickTrackFlag\",\n level: 3,\n type: \"u\",\n divx: true,\n \"default\": 0,\n description: \"DivX trick track extenstions\"\n },\n 0xc1: {\n name: \"TrickTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc0: {\n name: \"TrickTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xed: {\n name: \"TrackJoinUID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of a track whose blocks are used to create this virtual track.\"\n },\n 0xe9: {\n name: \"TrackJoinBlocks\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all tracks whose Blocks need to be combined to create this virtual track\"\n },\n 0xe6: {\n name: \"TrackPlaneType\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n description: \"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background).\"\n },\n 0xe5: {\n name: \"TrackPlaneUID\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of the track representing the plane.\"\n },\n 0xe4: {\n name: \"TrackPlane\",\n level: 5,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n description: \"Contains a video plane track that need to be combined to create this 3D track\"\n },\n 0xe3: {\n name: \"TrackCombinePlanes\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all video plane tracks that need to be combined to create this 3D track\"\n },\n 0xe2: {\n name: \"TrackOperation\",\n level: 3,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject.\"\n },\n 0x7d7b: {\n name: \"ChannelPositions\",\n cppname: \"AudioPosition\",\n level: 4,\n type: \"b\",\n webm: false,\n description: \"Table of horizontal angles for each successive channel, see appendix.\"\n },\n 0x9f: {\n name: \"Channels\",\n cppname: \"AudioChannels\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Numbers of channels in the track.\"\n },\n 0x78b5: {\n name: \"OutputSamplingFrequency\",\n cppname: \"AudioOutputSamplingFreq\",\n level: 4,\n type: \"f\",\n minver: 1,\n \"default\": \"Sampling Frequency\",\n range: \"> 0\",\n description: \"Real output sampling frequency in Hz (used for SBR techniques).\"\n },\n 0xb5: {\n name: \"SamplingFrequency\",\n cppname: \"AudioSamplingFreq\",\n level: 4,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"default\": 8000.0,\n range: \"> 0\",\n description: \"Sampling frequency in Hz.\"\n },\n 0xe1: {\n name: \"Audio\",\n cppname: \"TrackAudio\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Audio settings.\"\n },\n 0x2383e3: {\n name: \"FrameRate\",\n cppname: \"VideoFrameRate\",\n level: 4,\n type: \"f\",\n range: \"> 0\",\n \"strong\": \"Informational\",\n description: \"Number of frames per second. only.\"\n },\n 0x2fb523: {\n name: \"GammaValue\",\n cppname: \"VideoGamma\",\n level: 4,\n type: \"f\",\n webm: false,\n range: \"> 0\",\n description: \"Gamma Value.\"\n },\n 0x2eb524: {\n name: \"ColourSpace\",\n cppname: \"VideoColourSpace\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 4,\n description: \"Same value as in AVI (32 bits).\"\n },\n 0x54b3: {\n name: \"AspectRatioType\",\n cppname: \"VideoAspectRatio\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).\"\n },\n 0x54b2: {\n name: \"DisplayUnit\",\n cppname: \"VideoDisplayUnit\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio).\"\n },\n 0x54ba: {\n name: \"DisplayHeight\",\n cppname: \"VideoDisplayHeight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelHeight\",\n range: \"not 0\",\n description: \"Height of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54b0: {\n name: \"DisplayWidth\",\n cppname: \"VideoDisplayWidth\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelWidth\",\n range: \"not 0\",\n description: \"Width of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54dd: {\n name: \"PixelCropRight\",\n cppname: \"VideoPixelCropRight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the right of the image.\"\n },\n 0x54cc: {\n name: \"PixelCropLeft\",\n cppname: \"VideoPixelCropLeft\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the left of the image.\"\n },\n 0x54bb: {\n name: \"PixelCropTop\",\n cppname: \"VideoPixelCropTop\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the top of the image.\"\n },\n 0x54aa: {\n name: \"PixelCropBottom\",\n cppname: \"VideoPixelCropBottom\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the bottom of the image (for HDTV content).\"\n },\n 0xba: {\n name: \"PixelHeight\",\n cppname: \"VideoPixelHeight\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Height of the encoded video frames in pixels.\"\n },\n 0xb0: {\n name: \"PixelWidth\",\n cppname: \"VideoPixelWidth\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Width of the encoded video frames in pixels.\"\n },\n 0x53b9: {\n name: \"OldStereoMode\",\n level: 4,\n type: \"u\",\n \"maxver\": \"0\",\n webm: false,\n divx: false,\n description: \"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes).\"\n },\n 0x53c0: {\n name: \"AlphaMode\",\n cppname: \"VideoAlphaMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data.\"\n },\n 0x53b8: {\n name: \"StereoMode\",\n cppname: \"VideoStereoMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes.\"\n },\n 0x9a: {\n name: \"FlagInterlaced\",\n cppname: \"VideoFlagInterlaced\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if the video is interlaced. (1 bit)\"\n },\n 0xe0: {\n name: \"Video\",\n cppname: \"TrackVideo\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Video settings.\"\n },\n 0x66a5: {\n name: \"TrackTranslateTrackID\",\n level: 4,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x66bf: {\n name: \"TrackTranslateCodec\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x66fc: {\n name: \"TrackTranslateEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x56bb: {\n name: \"SeekPreRoll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid.\"\n },\n 0x56aa: {\n name: \"CodecDelay\",\n level: 3,\n type: \"u\",\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster.\"\n },\n 0x6fab: {\n name: \"TrackOverlay\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.\"\n },\n 0xaa: {\n name: \"CodecDecodeAll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"The codec can decode potentially damaged data (1 bit).\"\n },\n 0x26b240: {\n name: \"CodecDownloadURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to download about the codec used.\"\n },\n 0x3b4040: {\n name: \"CodecInfoURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to find information about the codec used.\"\n },\n 0x3a9697: {\n name: \"CodecSettings\",\n level: 3,\n type: \"8\",\n webm: false,\n description: \"A string describing the encoding setting used.\"\n },\n 0x63a2: {\n name: \"CodecPrivate\",\n level: 3,\n type: \"b\",\n minver: 1,\n description: \"Private data only known to the codec.\"\n },\n 0x22b59c: {\n name: \"Language\",\n cppname: \"TrackLanguage\",\n level: 3,\n type: \"s\",\n minver: 1,\n \"default\": \"eng\",\n description: \"Specifies the language of the track in the Matroska languages form.\"\n },\n 0x536e: {\n name: \"Name\",\n cppname: \"TrackName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable track name.\"\n },\n 0x55ee: {\n name: \"MaxBlockAdditionID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The maximum value of BlockAdditions for this track.\"\n },\n 0x537f: {\n name: \"TrackOffset\",\n level: 3,\n type: \"i\",\n webm: false,\n \"default\": 0,\n description: \"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track.\"\n },\n 0x23314f: {\n name: \"TrackTimecodeScale\",\n level: 3,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"maxver\": \"3\",\n webm: false,\n \"default\": 1.0,\n range: \"> 0\",\n description: \"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).\"\n },\n 0x234e7a: {\n name: \"DefaultDecodedFieldDuration\",\n cppname: \"TrackDefaultDecodedFieldDuration\",\n level: 3,\n type: \"u\",\n minver: 4,\n range: \"not 0\",\n description: \"The period in nanoseconds (not scaled by TimcodeScale)\\nbetween two successive fields at the output of the decoding process (see the notes)\"\n },\n 0x23e383: {\n name: \"DefaultDuration\",\n cppname: \"TrackDefaultDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block).\"\n },\n 0x6df8: {\n name: \"MaxCache\",\n cppname: \"TrackMaxCache\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.\"\n },\n 0x6de7: {\n name: \"MinCache\",\n cppname: \"TrackMinCache\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.\"\n },\n 0x9c: {\n name: \"FlagLacing\",\n cppname: \"TrackFlagLacing\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track may contain blocks using lacing. (1 bit)\"\n },\n 0x55aa: {\n name: \"FlagForced\",\n cppname: \"TrackFlagForced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)\"\n },\n 0xb9: {\n name: \"FlagEnabled\",\n cppname: \"TrackFlagEnabled\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track is usable. (1 bit)\"\n },\n 0x73c5: {\n name: \"TrackUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.\"\n },\n 0xd7: {\n name: \"TrackNumber\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).\"\n },\n 0xae: {\n name: \"TrackEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Describes a track with all elements.\"\n },\n 0x1654ae6b: {\n name: \"Tracks\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"A top-level block of information with many tracks described.\"\n },\n 0xaf: {\n name: \"EncryptedBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"Similar to EncryptedBlock Structure)\"\n },\n 0xca: {\n name: \"ReferenceTimeCode\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc9: {\n name: \"ReferenceOffset\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc8: {\n name: \"ReferenceFrame\",\n level: 3,\n type: \"m\",\n multiple: false,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xcf: {\n name: \"SliceDuration\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) duration to apply to the element.\"\n },\n 0xce: {\n name: \"Delay\",\n cppname: \"SliceDelay\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) delay to apply to the element.\"\n },\n 0xcb: {\n name: \"BlockAdditionID\",\n cppname: \"SliceBlockAddID\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The ID of the BlockAdditional element (0 is the main Block).\"\n },\n 0xcd: {\n name: \"FrameNumber\",\n cppname: \"SliceFrameNumber\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).\"\n },\n 0xcc: {\n name: \"LaceNumber\",\n cppname: \"SliceLaceNumber\",\n level: 5,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n divx: false,\n description: \"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0xe8: {\n name: \"TimeSlice\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n divx: false,\n description: \"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0x8e: {\n name: \"Slices\",\n level: 3,\n type: \"m\",\n minver: 1,\n divx: false,\n description: \"Contains slices description.\"\n },\n 0x75a2: {\n name: \"DiscardPadding\",\n level: 3,\n type: \"i\",\n minver: 4,\n webm: true,\n description: \"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback.\"\n },\n 0xa4: {\n name: \"CodecState\",\n level: 3,\n type: \"b\",\n minver: 2,\n webm: false,\n description: \"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.\"\n },\n 0xfd: {\n name: \"ReferenceVirtual\",\n level: 3,\n type: \"i\",\n webm: false,\n description: \"Relative position of the data that should be in position of the virtual block.\"\n },\n 0xfb: {\n name: \"ReferenceBlock\",\n level: 3,\n type: \"i\",\n multiple: true,\n minver: 1,\n description: \"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to.\"\n },\n 0xfa: {\n name: \"ReferencePriority\",\n cppname: \"FlagReferenced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.\"\n },\n 0x9b: {\n name: \"BlockDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n \"default\": \"TrackDuration\",\n description: \"The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in \\\"display\\\" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.\"\n },\n 0xa5: {\n name: \"BlockAdditional\",\n level: 5,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Interpreted by the codec as it wishes (using the BlockAddID).\"\n },\n 0xee: {\n name: \"BlockAddID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"An ID to identify the BlockAdditional level.\"\n },\n 0xa6: {\n name: \"BlockMore\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contain the BlockAdditional and some parameters.\"\n },\n 0x75a1: {\n name: \"BlockAdditions\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.\"\n },\n 0xa2: {\n name: \"BlockVirtual\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)\"\n },\n 0xa1: {\n name: \"Block\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)\"\n },\n 0xa0: {\n name: \"BlockGroup\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.\"\n },\n 0xa3: {\n name: \"SimpleBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 2,\n webm: true,\n divx: true,\n description: \"Similar to SimpleBlock Structure\"\n },\n 0xab: {\n name: \"PrevSize\",\n cppname: \"ClusterPrevSize\",\n level: 2,\n type: \"u\",\n minver: 1,\n description: \"Size of the previous Cluster, in octets. Can be useful for backward playing.\",\n position: \"prevCluster\"\n },\n 0xa7: {\n name: \"Position\",\n cppname: \"ClusterPosition\",\n level: 2,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.\",\n position: \"segment\"\n },\n 0x58d7: {\n name: \"SilentTrackNumber\",\n cppname: \"ClusterSilentTrackNumber\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.\"\n },\n 0xe7: {\n name: \"Timecode\",\n cppname: \"ClusterTimecode\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp of the cluster (based on TimecodeScale).\"\n },\n 0x1f43b675: {\n name: \"Cluster\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"The lower level element containing the (monolithic) Block structure.\"\n },\n 0x4d80: {\n name: \"MuxingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Muxing application or library (\\\"libmatroska-0.4.3\\\").\"\n },\n 0x7ba9: {\n name: \"Title\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"General name of the segment.\"\n },\n 0x2ad7b2: {\n name: \"TimecodeScaleDenominator\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 4,\n \"default\": \"1000000000\",\n description: \"Timestamp scale numerator, see TimecodeScale.\"\n },\n 0x2ad7b1: {\n name: \"TimecodeScale\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": \"1000000\",\n description: \"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds).\"\n },\n 0x69a5: {\n name: \"ChapterTranslateID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x69bf: {\n name: \"ChapterTranslateCodec\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x69fc: {\n name: \"ChapterTranslateEditionUID\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x3e83bb: {\n name: \"NextFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the next segment.\"\n },\n 0x3eb923: {\n name: \"NextUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the next chained segment (128 bits).\"\n },\n 0x3c83ab: {\n name: \"PrevFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the previous segment.\"\n },\n 0x3cb923: {\n name: \"PrevUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the previous chained segment (128 bits).\"\n },\n 0x73a4: {\n name: \"SegmentUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n bytesize: 16,\n description: \"A randomly generated unique ID to identify the current segment between many others (128 bits).\"\n },\n 0x1549a966: {\n name: \"Info\",\n level: 1,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains miscellaneous general information and statistics on the file.\"\n },\n 0x53ac: {\n name: \"SeekPosition\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the element in the segment in octets (0 = first level 1 element).\",\n position: \"segment\"\n },\n 0x53ab: {\n name: \"SeekID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"The binary ID corresponding to the element name.\",\n type2: \"ebmlID\"\n },\n 0x4dbb: {\n name: \"Seek\",\n cppname: \"SeekPoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains a single seek entry to an EBML element.\"\n },\n 0x114d9b74: {\n name: \"SeekHead\",\n cppname: \"SeekHeader\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Contains the position of other level 1 elements.\"\n },\n 0x7e7b: {\n name: \"SignatureElementList\",\n level: 2,\n type: \"m\",\n multiple: true,\n webm: false,\n i: \"Cluster|Block|BlockAdditional\",\n description: \"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption.\"\n },\n 0x7e5b: {\n name: \"SignatureElements\",\n level: 1,\n type: \"m\",\n webm: false,\n description: \"Contains elements that will be used to compute the signature.\"\n },\n 0x7eb5: {\n name: \"Signature\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The signature of the data (until a new.\"\n },\n 0x7ea5: {\n name: \"SignaturePublicKey\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The public key to use with the algorithm (in the case of a PKI-based signature).\"\n },\n 0x7e9a: {\n name: \"SignatureHash\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Hash algorithm used (1=SHA1-160, 2=MD5).\"\n },\n 0x7e8a: {\n name: \"SignatureAlgo\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Signature algorithm used (1=RSA, 2=elliptic).\"\n },\n 0x1b538667: {\n name: \"SignatureSlot\",\n level: -1,\n type: \"m\",\n multiple: true,\n webm: false,\n description: \"Contain signature of some (coming) elements in the stream.\"\n },\n 0xbf: {\n name: \"CRC-32\",\n level: -1,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian\",\n crc: true\n },\n 0xec: {\n name: \"Void\",\n level: -1,\n type: \"b\",\n minver: 1,\n description: \"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.\"\n },\n 0x42f3: {\n name: \"EBMLMaxSizeLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 8,\n minver: 1,\n description: \"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.\"\n },\n 0x42f2: {\n name: \"EBMLMaxIDLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 4,\n minver: 1,\n description: \"The maximum length of the IDs you'll find in this file (4 or less in Matroska).\"\n },\n 0x42f7: {\n name: \"EBMLReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum EBML version a parser has to support to read this file.\"\n },\n 0x1a45dfa3: {\n name: \"EBML\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Set the EBML characteristics of the data to follow. Each EBML document has to start with this.\"\n },\n 0x55b0: {\n name: \"Colour\",\n level: \"4\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n description: \"Settings describing the colour format.\"\n },\n 0x55b1: {\n name: \"MatrixCoefficients\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273.\"\n },\n 0x55b9: {\n name: \"Range\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"Clipping of the color ranges.\"\n },\n 0x55ba: {\n name: \"TransferCharacteristics\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The transfer characteristics of the video.\"\n },\n 0x55bb: {\n name: \"Primaries\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273.\"\n },\n};\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar tools = require(\"./tools\");\n/**\n * This is an informal code for reference.\n * EBMLReader is a class for getting information to enable seeking Webm recorded by MediaRecorder.\n * So please do not use for regular WebM files.\n */\nvar EBMLReader = /** @class */ (function (_super) {\n __extends(EBMLReader, _super);\n function EBMLReader() {\n var _this = _super.call(this) || this;\n _this.logGroup = \"\";\n _this.hasLoggingStarted = false;\n _this.metadataloaded = false;\n _this.chunks = [];\n _this.stack = [];\n _this.segmentOffset = 0;\n _this.last2SimpleBlockVideoTrackTimecode = [0, 0];\n _this.last2SimpleBlockAudioTrackTimecode = [0, 0];\n _this.lastClusterTimecode = 0;\n _this.lastClusterPosition = 0;\n _this.timecodeScale = 1000000; // webm default TimecodeScale is 1ms\n _this.metadataSize = 0;\n _this.metadatas = [];\n _this.cues = [];\n _this.firstVideoBlockRead = false;\n _this.firstAudioBlockRead = false;\n _this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n _this.trackTypes = [];\n _this.trackDefaultDuration = [];\n _this.trackCodecDelay = [];\n _this.trackInfo = { type: \"nothing\" };\n _this.ended = false;\n _this.logging = false;\n _this.use_duration_every_simpleblock = false;\n _this.use_webp = false;\n _this.use_segment_info = true;\n _this.drop_default_duration = true;\n return _this;\n }\n /**\n * emit final state.\n */\n EBMLReader.prototype.stop = function () {\n this.ended = true;\n this.emit_segment_info();\n // clean up any unclosed Master Elements at the end of the stream.\n while (this.stack.length) {\n this.stack.pop();\n if (this.logging) {\n console.groupEnd();\n }\n }\n // close main group if set, logging is enabled, and has actually logged anything.\n if (this.logging && this.hasLoggingStarted && this.logGroup) {\n console.groupEnd();\n }\n };\n /**\n * emit chunk info\n */\n EBMLReader.prototype.emit_segment_info = function () {\n var data = this.chunks;\n this.chunks = [];\n if (!this.metadataloaded) {\n this.metadataloaded = true;\n this.metadatas = data;\n var videoTrackNum = this.trackTypes.indexOf(1); // find first video track\n var audioTrackNum = this.trackTypes.indexOf(2); // find first audio track\n this.trackInfo = videoTrackNum >= 0 && audioTrackNum >= 0 ? { type: \"both\", trackNumber: videoTrackNum }\n : videoTrackNum >= 0 ? { type: \"video\", trackNumber: videoTrackNum }\n : audioTrackNum >= 0 ? { type: \"audio\", trackNumber: audioTrackNum }\n : { type: \"nothing\" };\n if (!this.use_segment_info) {\n return;\n }\n this.emit(\"metadata\", { data: data, metadataSize: this.metadataSize });\n }\n else {\n if (!this.use_segment_info) {\n return;\n }\n var timecode = this.lastClusterTimecode;\n var duration = this.duration;\n var timecodeScale = this.timecodeScale;\n this.emit(\"cluster\", { timecode: timecode, data: data });\n this.emit(\"duration\", { timecodeScale: timecodeScale, duration: duration });\n }\n };\n EBMLReader.prototype.read = function (elm) {\n var _this = this;\n var drop = false;\n if (this.ended) {\n // reader is finished\n return;\n }\n if (elm.type === \"m\") {\n // 閉じタグの自動挿入\n if (elm.isEnd) {\n this.stack.pop();\n }\n else {\n var parent_1 = this.stack[this.stack.length - 1];\n if (parent_1 != null && parent_1.level >= elm.level) {\n // 閉じタグなしでレベルが下がったら閉じタグを挿入\n this.stack.pop();\n // From http://w3c.github.io/media-source/webm-byte-stream-format.html#webm-media-segments\n // This fixes logging for webm streams with Cluster of unknown length and no Cluster closing elements.\n if (this.logging) {\n console.groupEnd();\n }\n parent_1.dataEnd = elm.dataEnd;\n parent_1.dataSize = elm.dataEnd - parent_1.dataStart;\n parent_1.unknownSize = false;\n var o = Object.assign({}, parent_1, { name: parent_1.name, type: parent_1.type, isEnd: true });\n this.chunks.push(o);\n }\n this.stack.push(elm);\n }\n }\n if (elm.type === \"m\" && elm.name == \"Segment\") {\n if (this.segmentOffset != 0) {\n console.warn(\"Multiple segments detected!\");\n }\n this.segmentOffset = elm.dataStart;\n this.emit(\"segment_offset\", this.segmentOffset);\n }\n else if (elm.type === \"b\" && elm.name === \"SimpleBlock\") {\n var _a = tools.ebmlBlock(elm.data), timecode = _a.timecode, trackNumber = _a.trackNumber, frames_1 = _a.frames;\n if (this.trackTypes[trackNumber] === 1) { // trackType === 1 => video track\n if (!this.firstVideoBlockRead) {\n this.firstVideoBlockRead = true;\n if (this.trackInfo.type === \"both\" || this.trackInfo.type === \"video\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockVideoTrackTimecode = [this.last2SimpleBlockVideoTrackTimecode[1], timecode];\n }\n else if (this.trackTypes[trackNumber] === 2) { // trackType === 2 => audio track\n if (!this.firstAudioBlockRead) {\n this.firstAudioBlockRead = true;\n if (this.trackInfo.type === \"audio\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockAudioTrackTimecode = [this.last2SimpleBlockAudioTrackTimecode[1], timecode];\n }\n if (this.use_duration_every_simpleblock) {\n this.emit(\"duration\", { timecodeScale: this.timecodeScale, duration: this.duration });\n }\n if (this.use_webp) {\n frames_1.forEach(function (frame) {\n var startcode = frame.slice(3, 6).toString(\"hex\");\n if (startcode !== \"9d012a\") {\n return;\n }\n ; // VP8 の場合\n var webpBuf = tools.VP8BitStreamToRiffWebPBuffer(frame);\n var webp = new Blob([webpBuf], { type: \"image/webp\" });\n var currentTime = _this.duration;\n _this.emit(\"webp\", { currentTime: currentTime, webp: webp });\n });\n }\n }\n else if (elm.type === \"m\" && elm.name === \"Cluster\" && elm.isEnd === false) {\n this.firstVideoBlockRead = false;\n this.firstAudioBlockRead = false;\n this.emit_segment_info();\n this.emit(\"cluster_ptr\", elm.tagStart);\n this.lastClusterPosition = elm.tagStart;\n }\n else if (elm.type === \"u\" && elm.name === \"Timecode\") {\n this.lastClusterTimecode = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TimecodeScale\") {\n this.timecodeScale = elm.value;\n }\n else if (elm.type === \"m\" && elm.name === \"TrackEntry\") {\n if (elm.isEnd) {\n this.trackTypes[this.currentTrack.TrackNumber] = this.currentTrack.TrackType;\n this.trackDefaultDuration[this.currentTrack.TrackNumber] = this.currentTrack.DefaultDuration;\n this.trackCodecDelay[this.currentTrack.TrackNumber] = this.currentTrack.CodecDelay;\n }\n else {\n this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n }\n }\n else if (elm.type === \"u\" && elm.name === \"TrackType\") {\n this.currentTrack.TrackType = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TrackNumber\") {\n this.currentTrack.TrackNumber = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"CodecDelay\") {\n this.currentTrack.CodecDelay = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"DefaultDuration\") {\n // media source api は DefaultDuration を計算するとバグる。\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // chrome 58 ではこれを回避するために DefaultDuration 要素を抜き取った。\n // chrome 58 以前でもこのタグを抜き取ることで回避できる\n if (this.drop_default_duration) {\n console.warn(\"DefaultDuration detected!, remove it\");\n drop = true;\n }\n else {\n this.currentTrack.DefaultDuration = elm.value;\n }\n }\n else if (elm.name === \"unknown\") {\n console.warn(elm);\n }\n if (!this.metadataloaded && elm.dataEnd > 0) {\n this.metadataSize = elm.dataEnd;\n }\n if (!drop) {\n this.chunks.push(elm);\n }\n if (this.logging) {\n this.put(elm);\n }\n };\n Object.defineProperty(EBMLReader.prototype, \"duration\", {\n /**\n * DefaultDuration が定義されている場合は最後のフレームのdurationも考慮する\n * 単位 timecodeScale\n *\n * !!! if you need duration with seconds !!!\n * ```js\n * const nanosec = reader.duration * reader.timecodeScale;\n * const sec = nanosec / 1000 / 1000 / 1000;\n * ```\n */\n get: function () {\n if (this.trackInfo.type === \"nothing\") {\n console.warn(\"no video, no audio track\");\n return 0;\n }\n // defaultDuration は 生の nano sec\n var defaultDuration = 0;\n // nanoseconds\n var codecDelay = 0;\n var lastTimecode = 0;\n var _defaultDuration = this.trackDefaultDuration[this.trackInfo.trackNumber];\n if (typeof _defaultDuration === \"number\") {\n defaultDuration = _defaultDuration;\n }\n else {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // default duration がないときに使う delta\n if (this.trackInfo.type === \"both\") {\n if (this.last2SimpleBlockAudioTrackTimecode[1] > this.last2SimpleBlockVideoTrackTimecode[1]) {\n // audio diff\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n // audio delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(2)]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // audio timecode\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n }\n else {\n // video diff\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n // video delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(1)]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // video timecode\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n }\n else if (this.trackInfo.type === \"video\") {\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n else if (this.trackInfo.type === \"audio\") {\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n } // else { not reached }\n }\n // convert to timecodescale\n var duration_nanosec = ((this.lastClusterTimecode + lastTimecode) * this.timecodeScale) + defaultDuration - codecDelay;\n var duration = duration_nanosec / this.timecodeScale;\n return Math.floor(duration);\n },\n enumerable: false,\n configurable: true\n });\n EBMLReader.prototype.addListener = function (event, listener) {\n return _super.prototype.addListener.call(this, event, listener);\n };\n EBMLReader.prototype.put = function (elm) {\n if (!this.hasLoggingStarted) {\n this.hasLoggingStarted = true;\n if (this.logging && this.logGroup) {\n console.groupCollapsed(this.logGroup);\n }\n }\n if (elm.type === \"m\") {\n if (elm.isEnd) {\n console.groupEnd();\n }\n else {\n console.group(elm.name + \":\" + elm.tagStart);\n }\n }\n else if (elm.type === \"b\") {\n // for debug\n //if(elm.name === \"SimpleBlock\"){\n //const o = EBML.tools.ebmlBlock(elm.value);\n //console.log(elm.name, elm.type, o.trackNumber, o.timecode);\n //}else{\n console.log(elm.name, elm.type);\n //}\n }\n else {\n console.log(elm.name, elm.tagStart, elm.type, elm.value);\n }\n };\n return EBMLReader;\n}(events_1.EventEmitter));\nexports.default = EBMLReader;\n;\n;\n;\n;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertEBMLDateToJSDate = exports.createFloatBuffer = exports.createIntBuffer = exports.createUIntBuffer = exports.encodeValueToBuffer = exports.concat = exports.putRefinedMetaData = exports.extractElement = exports.removeElement = exports.makeMetadataSeekable = exports.createRIFFChunk = exports.VP8BitStreamToRiffWebPBuffer = exports.WebPBlockFilter = exports.encodeTag = exports.readBlock = exports.ebmlBlock = exports.writeVint = exports.readVint = exports.Buffer = void 0;\n/// \nvar int64_buffer_1 = require(\"int64-buffer\");\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nvar _Buffer = require(\"buffer\");\nvar tools_ebml_1 = require(\"./tools-ebml\");\nvar _block = require(\"ebml-block\");\nexports.Buffer = _Buffer.Buffer;\nexports.readVint = tools_ebml_1.default.readVint;\nexports.writeVint = tools_ebml_1.default.writeVint;\nexports.ebmlBlock = _block;\nfunction readBlock(buf) {\n return (0, exports.ebmlBlock)(new exports.Buffer(buf));\n}\nexports.readBlock = readBlock;\n/**\n * @param end - if end === false then length is unknown\n */\nfunction encodeTag(tagId, tagData, unknownSize) {\n if (unknownSize === void 0) { unknownSize = false; }\n return concat([\n tagId,\n unknownSize ?\n new exports.Buffer('01ffffffffffffff', 'hex') :\n (0, exports.writeVint)(tagData.length),\n tagData\n ]);\n}\nexports.encodeTag = encodeTag;\n/**\n * WebP ファイルにできる SimpleBlock の パスフィルタ\n */\nfunction WebPBlockFilter(elms) {\n return elms.reduce(function (lst, elm) {\n if (elm.type !== \"b\") {\n return lst;\n }\n if (elm.name !== \"SimpleBlock\") {\n return lst;\n }\n var o = (0, exports.ebmlBlock)(elm.data);\n var hasWebP = o.frames.some(function (frame) {\n // https://tools.ietf.org/html/rfc6386#section-19.1\n var startcode = frame.slice(3, 6).toString(\"hex\");\n return startcode === \"9d012a\";\n });\n if (!hasWebP) {\n return lst;\n }\n return lst.concat(elm);\n }, []);\n}\nexports.WebPBlockFilter = WebPBlockFilter;\n/**\n * @param frame - VP8 BitStream のうち startcode をもつ frame\n * @return - WebP ファイルの ArrayBuffer\n */\nfunction VP8BitStreamToRiffWebPBuffer(frame) {\n var VP8Chunk = createRIFFChunk(\"VP8 \", frame);\n var WebPChunk = concat([\n new exports.Buffer(\"WEBP\", \"ascii\"),\n VP8Chunk\n ]);\n return createRIFFChunk(\"RIFF\", WebPChunk);\n}\nexports.VP8BitStreamToRiffWebPBuffer = VP8BitStreamToRiffWebPBuffer;\n/**\n * RIFF データチャンクを作る\n */\nfunction createRIFFChunk(FourCC, chunk) {\n var chunkSize = new exports.Buffer(4);\n chunkSize.writeUInt32LE(chunk.byteLength, 0);\n return concat([\n new exports.Buffer(FourCC.substr(0, 4), \"ascii\"),\n chunkSize,\n chunk,\n new exports.Buffer(chunk.byteLength % 2 === 0 ? 0 : 1) // padding\n ]);\n}\nexports.createRIFFChunk = createRIFFChunk;\n/* Original Metadata\n\n m 0\tEBML\n u 1\t EBMLVersion 1\n u 1\t EBMLReadVersion 1\n u 1\t EBMLMaxIDLength 4\n u 1\t EBMLMaxSizeLength 8\n s 1\t DocType webm\n u 1\t DocTypeVersion 4\n u 1\t DocTypeReadVersion 2\n m 0\tSegment\n m 1\t Info segmentContentStartPos, all CueClusterPositions provided in info.cues will be relative to here and will need adjusted\n u 2\t TimecodeScale 1000000\n 8 2\t MuxingApp Chrome\n 8 2\t WritingApp Chrome\n m 1\t Tracks tracksStartPos\n m 2\t TrackEntry\n u 3\t TrackNumber 1\n u 3\t TrackUID 31790271978391090\n u 3\t TrackType 2\n s 3\t CodecID A_OPUS\n b 3\t CodecPrivate \n m 3\t Audio\n f 4\t SamplingFrequency 48000\n u 4\t Channels 1\n m 2\t TrackEntry\n u 3\t TrackNumber 2\n u 3\t TrackUID 24051277436254136\n u 3\t TrackType 1\n s 3\t CodecID V_VP8\n m 3\t Video\n u 4\t PixelWidth 1024\n u 4\t PixelHeight 576\n m 1\t Cluster clusterStartPos\n u 2\t Timecode 0\n b 2\t SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/* Desired Metadata\n\n m\t0 EBML\n u\t1 EBMLVersion 1\n u\t1 EBMLReadVersion 1\n u\t1 EBMLMaxIDLength 4\n u\t1 EBMLMaxSizeLength 8\n s\t1 DocType webm\n u\t1 DocTypeVersion 4\n u\t1 DocTypeReadVersion 2\n m\t0 Segment\n m\t1 SeekHead -> This is SeekPosition 0, so all SeekPositions can be calculated as (bytePos - segmentContentStartPos), which is 44 in this case\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x15, 0x49, 0xA9, 0x66]) Info\n u\t3 SeekPosition -> infoStartPos =\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x16, 0x54, 0xAE, 0x6B]) Tracks\n u\t3 SeekPosition { tracksStartPos }\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x1C, 0x53, 0xBB, 0x6B]) Cues\n u\t3 SeekPosition { cuesStartPos }\n m\t1 Info\n f\t2 Duration 32480 -> overwrite, or insert if it doesn't exist\n u\t2 TimecodeScale 1000000\n 8\t2 MuxingApp Chrome\n 8\t2 WritingApp Chrome\n m\t1 Tracks\n m\t2 TrackEntry\n u\t3 TrackNumber 1\n u\t3 TrackUID 31790271978391090\n u\t3 TrackType 2\n s\t3 CodecID A_OPUS\n b\t3 CodecPrivate \n m\t3 Audio\n f\t4 SamplingFrequency 48000\n u\t4 Channels 1\n m\t2 TrackEntry\n u\t3 TrackNumber 2\n u\t3 TrackUID 24051277436254136\n u\t3 TrackType 1\n s\t3 CodecID V_VP8\n m\t3 Video\n u\t4 PixelWidth 1024\n u\t4 PixelHeight 576\n m 1 Cues -> cuesStartPos\n m 2 CuePoint\n u 3 CueTime 0\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 2 CuePoint\n u 3 CueTime 600\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 1 Cluster\n u 2 Timecode 0\n b 2 SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/**\n * convert the metadata from a streaming webm bytestream to a seekable file by inserting Duration, Seekhead and Cues\n * @param originalMetadata - orginal metadata (everything before the clusters start) from media recorder\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n */\nfunction makeMetadataSeekable(originalMetadata, duration, cuesInfo) {\n // extract the header, we can reuse this as-is\n var header = extractElement(\"EBML\", originalMetadata);\n var headerSize = encodedSizeOfEbml(header);\n //console.error(\"Header size: \" + headerSize);\n //printElementIds(header);\n // After the header comes the Segment open tag, which in this implementation is always 12 bytes (4 byte id, 8 byte 'unknown length')\n // After that the segment content starts. All SeekPositions and CueClusterPosition must be relative to segmentContentStartPos\n var segmentContentStartPos = headerSize + 12;\n //console.error(\"segmentContentStartPos: \" + segmentContentStartPos); \n // find the original metadata size, and adjust it for header size and Segment start element so we can keep all positions relative to segmentContentStartPos\n var originalMetadataSize = originalMetadata[originalMetadata.length - 1].dataEnd - segmentContentStartPos;\n //console.error(\"Original Metadata size: \" + originalMetadataSize);\n //printElementIds(originalMetadata);\n // extract the segment info, remove the potentially existing Duration element, and add our own one.\n var info = extractElement(\"Info\", originalMetadata);\n removeElement(\"Duration\", info);\n info.splice(1, 0, { name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) });\n var infoSize = encodedSizeOfEbml(info);\n //console.error(\"Info size: \" + infoSize);\n //printElementIds(info); \n // extract the track info, we can re-use this as is\n var tracks = extractElement(\"Tracks\", originalMetadata);\n var tracksSize = encodedSizeOfEbml(tracks);\n //console.error(\"Tracks size: \" + tracksSize);\n //printElementIds(tracks); \n var seekHeadSize = 47; // Initial best guess, but could be slightly larger if the Cues element is huge.\n var seekHead = [];\n var cuesSize = 5 + cuesInfo.length * 15; // very rough initial approximation, depends a lot on file size and number of CuePoints \n var cues = [];\n var lastSizeDifference = -1; // \n // The size of SeekHead and Cues elements depends on how many bytes the offsets values can be encoded in.\n // The actual offsets in CueClusterPosition depend on the final size of the SeekHead and Cues elements\n // We need to iteratively converge to a stable solution.\n var maxIterations = 10;\n var _loop_1 = function (i) {\n // SeekHead starts at 0\n var infoStart = seekHeadSize; // Info comes directly after SeekHead\n var tracksStart = infoStart + infoSize; // Tracks comes directly after Info\n var cuesStart = tracksStart + tracksSize; // Cues starts directly after \n var newMetadataSize = cuesStart + cuesSize; // total size of metadata \n // This is the offset all CueClusterPositions should be adjusted by due to the metadata size changing.\n var sizeDifference = newMetadataSize - originalMetadataSize;\n // console.error(`infoStart: ${infoStart}, infoSize: ${infoSize}`);\n // console.error(`tracksStart: ${tracksStart}, tracksSize: ${tracksSize}`);\n // console.error(`cuesStart: ${cuesStart}, cuesSize: ${cuesSize}`);\n // console.error(`originalMetadataSize: ${originalMetadataSize}, newMetadataSize: ${newMetadataSize}, sizeDifference: ${sizeDifference}`); \n // create the SeekHead element\n seekHead = [];\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) }); // Info\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(infoStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) }); // Tracks\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tracksStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) }); // Cues\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(cuesStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: true });\n seekHeadSize = encodedSizeOfEbml(seekHead);\n //console.error(\"SeekHead size: \" + seekHeadSize);\n //printElementIds(seekHead); \n // create the Cues element\n cues = [];\n cues.push({ name: \"Cues\", type: \"m\", isEnd: false });\n cuesInfo.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) });\n //console.error(`CueClusterPosition: ${CueClusterPosition}, Corrected to: ${CueClusterPosition - segmentContentStartPos} , offset by ${sizeDifference} to become ${(CueClusterPosition - segmentContentStartPos) + sizeDifference - segmentContentStartPos}`);\n // EBMLReader returns CueClusterPosition with absolute byte offsets. The Cues section expects them as offsets from the first level 1 element of the Segment, so we need to adjust it.\n CueClusterPosition -= segmentContentStartPos;\n // We also need to adjust to take into account the change in metadata size from when EBMLReader read the original metadata.\n CueClusterPosition += sizeDifference;\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n cues.push({ name: \"Cues\", type: \"m\", isEnd: true });\n cuesSize = encodedSizeOfEbml(cues);\n //console.error(\"Cues size: \" + cuesSize); \n //console.error(\"Cue count: \" + cuesInfo.length);\n //printElementIds(cues); \n // If the new MetadataSize is not the same as the previous iteration, we need to run once more.\n if (lastSizeDifference !== sizeDifference) {\n lastSizeDifference = sizeDifference;\n if (i === maxIterations - 1) {\n throw new Error(\"Failed to converge to a stable metadata size\");\n }\n }\n else {\n return \"break\";\n }\n };\n for (var i = 0; i < maxIterations; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n var finalMetadata = [].concat.apply([], [\n header,\n { name: \"Segment\", type: \"m\", isEnd: false, unknownSize: true },\n seekHead,\n info,\n tracks,\n cues\n ]);\n var result = new EBMLEncoder_1.default().encode(finalMetadata);\n //printElementIds(finalMetadata);\n //console.error(`Final metadata buffer size: ${result.byteLength}`);\n //console.error(`Final metadata buffer size without header and segment: ${result.byteLength-segmentContentStartPos}`);\n return result;\n}\nexports.makeMetadataSeekable = makeMetadataSeekable;\n/**\n * print all element id names in a list\n\n * @param metadata - array of EBML elements to print\n *\nexport function printElementIds(metadata: EBML.EBMLElementBuffer[]) {\n\n let result: EBML.EBMLElementBuffer[] = [];\n let start: number = -1;\n\n for (let i = 0; i < metadata.length; i++) {\n console.error(\"\\t id: \" + metadata[i].name);\n }\n}\n*/\n/**\n * remove all occurances of an EBML element from an array of elements\n * If it's a MasterElement you will also remove the content. (everything between start and end)\n * @param idName - name of the EBML Element to remove.\n * @param metadata - array of EBML elements to search\n */\nfunction removeElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n metadata.splice(start, i - start + 1);\n return;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n metadata.splice(i, 1);\n return;\n }\n }\n }\n}\nexports.removeElement = removeElement;\n/**\n * extract the first occurance of an EBML tag from a flattened array of EBML data.\n * If it's a MasterElement you will also get the content. (everything between start and end)\n * @param idName - name of the EBML Element to extract.\n * @param metadata - array of EBML elements to search\n */\nfunction extractElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n result = metadata.slice(start, i + 1);\n break;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n result.push(metadata[i]);\n break;\n }\n }\n }\n return result;\n}\nexports.extractElement = extractElement;\n/**\n * @deprecated\n * metadata に対して duration と seekhead を追加した metadata を返す\n * @param metadata - 変更前の webm における ファイル先頭から 最初の Cluster 要素までの 要素\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n * @deprecated @param clusterPtrs - 変更前の webm における SeekHead に追加する Cluster 要素 への start pointer\n * @deprecated @param cueInfos - please use cues.\n */\nfunction putRefinedMetaData(metadata, info) {\n if (Array.isArray(info.cueInfos) && !Array.isArray(info.cues)) {\n console.warn(\"putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues\");\n info.cues = info.cueInfos;\n }\n var ebml = [];\n var payload = [];\n for (var i_1 = 0; i_1 < metadata.length; i_1++) {\n var elm = metadata[i_1];\n if (elm.type === \"m\" && elm.name === \"Segment\") {\n ebml = metadata.slice(0, i_1);\n payload = metadata.slice(i_1);\n if (elm.unknownSize) {\n payload.shift(); // remove segment tag\n break;\n }\n throw new Error(\"this metadata is not streaming webm file\");\n }\n }\n // *0 *4 *5 *36 *40 *48=segmentOffset *185=originalPayloadOffsetEnd\n // | | | | | | |\n // [EBML][size]....[Segment][size][Info][size][Duration][size]...[Cluster]\n // | | |^inf | |\n // | +segmentSiz(12)+ |\n // +-ebmlSize(36)--+ | +-payloadSize(137)-------------+offsetEndDiff+\n // | | +-newPayloadSize(??)-------------------------+\n // | | | |\n // [Segment][size][Info][size][Duration][size]....[size][value][Cluster]\n // ^ |\n // | *??=newPayloadOffsetEnd\n // inf\n if (!(payload[payload.length - 1].dataEnd > 0)) {\n throw new Error(\"metadata dataEnd has wrong number\");\n }\n var originalPayloadOffsetEnd = payload[payload.length - 1].dataEnd; // = first cluster ptr\n var ebmlSize = ebml[ebml.length - 1].dataEnd; // = first segment ptr\n var refinedEBMLSize = new EBMLEncoder_1.default().encode(ebml).byteLength;\n var offsetDiff = refinedEBMLSize - ebmlSize;\n var payloadSize = originalPayloadOffsetEnd - payload[0].tagStart;\n var segmentSize = payload[0].tagStart - ebmlSize;\n var segmentOffset = payload[0].tagStart;\n var segmentTagBuf = new exports.Buffer([0x18, 0x53, 0x80, 0x67]); // Segment\n var segmentSizeBuf = new exports.Buffer('01ffffffffffffff', 'hex'); // Segmentの最後の位置は無数の Cluster 依存なので。 writeVint(newPayloadSize).byteLength ではなく、 infinity.\n var _segmentSize = segmentTagBuf.byteLength + segmentSizeBuf.byteLength; // == segmentSize\n var newPayloadSize = payloadSize;\n // We need the size to be stable between two refinements in order for our offsets to be correct\n // Bound the number of possible refinements so we can't go infinate if something goes wrong\n var i;\n for (i = 1; i < 20; i++) {\n var newPayloadOffsetEnd = ebmlSize + _segmentSize + newPayloadSize;\n var offsetEndDiff = newPayloadOffsetEnd - originalPayloadOffsetEnd;\n var sizeDiff = offsetDiff + offsetEndDiff;\n var refined = refineMetadata(payload, sizeDiff, info);\n var newNewRefinedSize = new EBMLEncoder_1.default().encode(refined).byteLength; // 一旦 seekhead を作って自身のサイズを調べる\n if (newNewRefinedSize === newPayloadSize) {\n // Size is stable\n return new EBMLEncoder_1.default().encode([].concat(ebml, [{ type: \"m\", name: \"Segment\", isEnd: false, unknownSize: true }], refined));\n }\n newPayloadSize = newNewRefinedSize;\n }\n throw new Error(\"unable to refine metadata, stable size could not be found in \" + i + \" iterations!\");\n}\nexports.putRefinedMetaData = putRefinedMetaData;\n// Given a list of EBMLElementBuffers, returns their encoded size in bytes\nfunction encodedSizeOfEbml(refinedMetaData) {\n var encorder = new EBMLEncoder_1.default();\n return refinedMetaData.reduce(function (lst, elm) { return lst.concat(encorder.encode([elm])); }, []).reduce(function (o, buf) { return o + buf.byteLength; }, 0);\n}\nfunction refineMetadata(mesetadata, sizeDiff, info) {\n var duration = info.duration, clusterPtrs = info.clusterPtrs, cues = info.cues;\n var _metadata = mesetadata.slice(0);\n if (typeof duration === \"number\") {\n // duration を追加する\n var overwrited_1 = false;\n _metadata.forEach(function (elm) {\n if (elm.type === \"f\" && elm.name === \"Duration\") {\n overwrited_1 = true;\n elm.data = createFloatBuffer(duration, 8);\n }\n });\n if (!overwrited_1) {\n insertTag(_metadata, \"Info\", [{ name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) }]);\n }\n }\n if (Array.isArray(cues)) {\n insertTag(_metadata, \"Cues\", create_cue(cues, sizeDiff));\n }\n var seekhead_children = [];\n if (Array.isArray(clusterPtrs)) {\n console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\");\n seekhead_children = create_seek_from_clusters(clusterPtrs, sizeDiff);\n }\n // remove seek info\n /*\n _metadata = _metadata.filter((elm)=> !(\n elm.name === \"Seek\" ||\n elm.name === \"SeekID\" ||\n elm.name === \"SeekPosition\") );\n */\n // working on progress\n //seekhead_children = seekhead_children.concat(create_seekhead(_metadata));\n insertTag(_metadata, \"SeekHead\", seekhead_children, true);\n return _metadata;\n}\nfunction create_seekhead(metadata, sizeDiff) {\n var seeks = [];\n [\"Info\", \"Tracks\", \"Cues\"].forEach(function (tagName) {\n var tagStarts = metadata.filter(function (elm) { return elm.type === \"m\" && elm.name === tagName && elm.isEnd === false; }).map(function (elm) { return elm[\"tagStart\"]; });\n var tagStart = tagStarts[0];\n if (typeof tagStart !== \"number\") {\n return;\n }\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n switch (tagName) {\n case \"Info\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) });\n break;\n case \"Tracks\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) });\n break;\n case \"Cues\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) });\n break;\n }\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tagStart + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_seek_from_clusters(clusterPtrs, sizeDiff) {\n var seeks = [];\n clusterPtrs.forEach(function (start) {\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n // [0x1F, 0x43, 0xB6, 0x75] で Cluster 意\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1F, 0x43, 0xB6, 0x75]) });\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(start + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_cue(cueInfos, sizeDiff) {\n var cues = [];\n cueInfos.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) }); // video track\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition + sizeDiff) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n return cues;\n}\nfunction insertTag(_metadata, tagName, children, insertHead) {\n if (insertHead === void 0) { insertHead = false; }\n // find the tagname from _metadata\n var idx = -1;\n for (var i = 0; i < _metadata.length; i++) {\n var elm = _metadata[i];\n if (elm.type === \"m\" && elm.name === tagName && elm.isEnd === false) {\n idx = i;\n break;\n }\n }\n if (idx >= 0) {\n // insert [] to \n Array.prototype.splice.apply(_metadata, [idx + 1, 0].concat(children));\n }\n else if (insertHead) {\n [].concat([{ name: tagName, type: \"m\", isEnd: false }], children, [{ name: tagName, type: \"m\", isEnd: true }]).reverse().forEach(function (elm) { _metadata.unshift(elm); });\n }\n else {\n // metadata 末尾に を追加\n // insert \n _metadata.push({ name: tagName, type: \"m\", isEnd: false });\n children.forEach(function (elm) { _metadata.push(elm); });\n _metadata.push({ name: tagName, type: \"m\", isEnd: true });\n }\n}\nfunction concat(list) {\n return exports.Buffer.concat(list);\n}\nexports.concat = concat;\nfunction encodeValueToBuffer(elm) {\n var data = new exports.Buffer(0);\n if (elm.type === \"m\") {\n return elm;\n }\n switch (elm.type) {\n case \"u\":\n data = createUIntBuffer(elm.value);\n break;\n case \"i\":\n data = createIntBuffer(elm.value);\n break;\n case \"f\":\n data = createFloatBuffer(elm.value);\n break;\n case \"s\":\n data = new exports.Buffer(elm.value, 'ascii');\n break;\n case \"8\":\n data = new exports.Buffer(elm.value, 'utf8');\n break;\n case \"b\":\n data = elm.value;\n break;\n case \"d\":\n data = new int64_buffer_1.Int64BE(elm.value.getTime().toString()).toBuffer();\n break;\n }\n return Object.assign({}, elm, { data: data });\n}\nexports.encodeValueToBuffer = encodeValueToBuffer;\nfunction createUIntBuffer(value) {\n // Big-endian, any size from 1 to 8\n // but js number is float64, so max 6 bit octets\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Uint64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeUIntBE(value, 0, bytes);\n return data;\n}\nexports.createUIntBuffer = createUIntBuffer;\nfunction createIntBuffer(value) {\n // Big-endian, any size from 1 to 8 octets\n // but js number is float64, so max 6 bit\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Int64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeIntBE(value, 0, bytes);\n return data;\n}\nexports.createIntBuffer = createIntBuffer;\nfunction createFloatBuffer(value, bytes) {\n if (bytes === void 0) { bytes = 8; }\n // Big-endian, defined for 4 and 8 octets (32, 64 bits)\n // js number is float64 so 8 bytes.\n if (bytes === 8) {\n // 64bit\n var data = new exports.Buffer(8);\n data.writeDoubleBE(value, 0);\n return data;\n }\n else if (bytes === 4) {\n // 32bit\n var data = new exports.Buffer(4);\n data.writeFloatBE(value, 0);\n return data;\n }\n else {\n throw new Error(\"float type bits must 4bytes or 8bytes\");\n }\n}\nexports.createFloatBuffer = createFloatBuffer;\nfunction convertEBMLDateToJSDate(int64str) {\n if (int64str instanceof Date) {\n return int64str;\n }\n return new Date(new Date(\"2001-01-01T00:00:00.000Z\").getTime() + (Number(int64str) / 1000 / 1000));\n}\nexports.convertEBMLDateToJSDate = convertEBMLDateToJSDate;\n","var vint = require('./vint')\n\nfunction BufferReader (buffer) {\n this.buffer = buffer\n this.offset = 0\n}\n\n// a super limited subset of the node buffer API\nBufferReader.prototype.nextInt16BE = function () {\n var value = this.buffer.readInt16BE(this.offset)\n this.offset += 2\n return value\n}\n\nBufferReader.prototype.nextUInt8 = function () {\n var value = this.buffer.readUInt8(this.offset)\n this.offset += 1\n return value\n}\n\n// EBML variable sized integers\nBufferReader.prototype.nextUIntV = function () {\n var v = vint(this.buffer, this.offset)\n this.offset += v.length\n return v.value\n}\n\nBufferReader.prototype.nextIntV = function () {\n var v = vint(this.buffer, this.offset, true)\n this.offset += v.length\n return v.value\n}\n\n// buffer slice\nBufferReader.prototype.nextBuffer = function (length) {\n var buffer = length\n ? this.buffer.slice(this.offset, this.offset + length)\n : this.buffer.slice(this.offset)\n this.offset += length || this.length\n return buffer\n}\n\n// remaining bytes to read\nObject.defineProperty(BufferReader.prototype, 'length', {\n get: function () { return this.buffer.length - this.offset }\n})\n\nmodule.exports = BufferReader\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ebml_1 = require(\"./ebml\");\n/**\n * based on ts-ebml and support large file,optimize memory usage during repair\n *\n * @param blob the blob you need to fix\n * @returns the blob that has been fixed\n *\n */\nfunction fixWebmDuration(blob) {\n return __awaiter(this, void 0, void 0, function () {\n var decoder, reader, readstream, readerBlob, _a, done, value, elms, refinedMetadataBuf, refinedMetadataBlob, firstPartBlobWithoutMetadata, finalBlob;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!blob) {\n throw Error('call to fixWebmDuration requires a blob');\n }\n decoder = new ebml_1.Decoder();\n reader = new ebml_1.Reader();\n readstream = blob.stream();\n readerBlob = readstream.getReader();\n _b.label = 1;\n case 1:\n if (!true) return [3 /*break*/, 3];\n return [4 /*yield*/, readerBlob.read()];\n case 2:\n _a = _b.sent(), done = _a.done, value = _a.value;\n if (done) {\n reader.stop();\n return [3 /*break*/, 3];\n }\n elms = decoder.decode(value);\n // As browser upgrade webm meta attributes are gradually added, \n // so filter unknown type to bypass this issue.\n elms = elms === null || elms === void 0 ? void 0 : elms.filter(function (elm) { return elm.type !== 'unknown'; });\n elms.forEach(function (elm) {\n reader.read(elm);\n });\n value = null;\n return [3 /*break*/, 1];\n case 3:\n refinedMetadataBuf = ebml_1.tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\n refinedMetadataBlob = new Blob([refinedMetadataBuf], { type: blob.type });\n firstPartBlobWithoutMetadata = blob.slice(reader.metadataSize);\n finalBlob = new Blob([refinedMetadataBlob, firstPartBlobWithoutMetadata], { type: blob.type });\n return [2 /*return*/, finalBlob];\n }\n });\n });\n}\nexports.default = fixWebmDuration;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools_1 = require(\"./tools\");\nvar Tools = /** @class */ (function () {\n function Tools() {\n }\n /**\n * read variable length integer per\n * https://www.matroska.org/technical/specs/index.html#EBML_ex\n * @static\n * @param {Buffer} buffer containing input\n * @param {Number} [start=0] position in buffer\n * @returns {{length: Number, value: number}} value / length object\n */\n Tools.readVint = function (buffer, start) {\n if (start === void 0) { start = 0; }\n var length = 8 - Math.floor(Math.log2(buffer[start]));\n if (length > 8) {\n var number = Tools.readHexString(buffer, start, start + length);\n throw new Error(\"Unrepresentable length: \".concat(length, \" \").concat(number));\n }\n if (start + length > buffer.length) {\n return null;\n }\n var value = buffer[start] & ((1 << (8 - length)) - 1);\n for (var i = 1; i < length; i += 1) {\n if (i === 7) {\n if (value >= Math.pow(2, 8) && buffer[start + 7] > 0) {\n return { length: length, value: -1 };\n }\n }\n value *= Math.pow(2, 8);\n value += buffer[start + i];\n }\n return { length: length, value: value };\n };\n /**\n * write variable length integer\n * @static\n * @param {Number} value to store into buffer\n * @returns {Buffer} containing the value\n */\n Tools.writeVint = function (value) {\n if (value < 0 || value > Math.pow(2, 53)) {\n throw new Error(\"Unrepresentable value: \".concat(value));\n }\n var length = 1;\n for (length = 1; length <= 8; length += 1) {\n if (value < Math.pow(2, (7 * length)) - 1) {\n break;\n }\n }\n var buffer = tools_1.Buffer.alloc(length);\n var val = value;\n for (var i = 1; i <= length; i += 1) {\n var b = val & 0xff;\n buffer[length - i] = b;\n val -= b;\n val /= Math.pow(2, 8);\n }\n buffer[0] |= 1 << (8 - length);\n return buffer;\n };\n /**\n * *\n * concatenate two arrays of bytes\n * @static\n * @param {Buffer} a1 First array\n * @param {Buffer} a2 Second array\n * @returns {Buffer} concatenated arrays\n */\n Tools.concatenate = function (a1, a2) {\n // both null or undefined\n if (!a1 && !a2) {\n return tools_1.Buffer.from([]);\n }\n if (!a1 || a1.byteLength === 0) {\n return a2;\n }\n if (!a2 || a2.byteLength === 0) {\n return a1;\n }\n return tools_1.Buffer.from(__spreadArray(__spreadArray([], a1, true), a2, true));\n };\n /**\n * get a hex text string from Buff[start,end)\n * @param {Buffer} buff from which to read the string\n * @param {Number} [start=0] starting point (default 0)\n * @param {Number} [end=buff.byteLength] ending point (default the whole buffer)\n * @returns {string} the hex string\n */\n Tools.readHexString = function (buff, start, end) {\n if (start === void 0) { start = 0; }\n if (end === void 0) { end = buff.byteLength; }\n return Array.from(buff.slice(start, end))\n .map(function (q) { return Number(q).toString(16); })\n .reduce(function (acc, current) { return \"\".concat(acc).concat(current.padStart(2, '0')); }, '');\n };\n /**\n * tries to read out a UTF-8 encoded string\n * @param {Buffer} buff the buffer to attempt to read from\n * @return {string|null} the decoded text, or null if unable to\n */\n Tools.readUtf8 = function (buff) {\n try {\n return tools_1.Buffer.from(buff).toString('utf8');\n }\n catch (exception) {\n return null;\n }\n };\n /**\n * get an unsigned number from a buffer\n * @param {Buffer} buff from which to read variable-length unsigned number\n * @returns {number|string} result (in hex for lengths > 6)\n */\n Tools.readUnsigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getUint8(0);\n case 2:\n return b.getUint16(0);\n case 4:\n return b.getUint32(0);\n default:\n break;\n }\n if (buff.byteLength <= 6) {\n return buff.reduce(function (acc, current) { return acc * 256 + current; }, 0);\n }\n return Tools.readHexString(buff, 0, buff.byteLength);\n };\n /**\n * get an signed number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length signed number\n * @returns {number} result\n */\n Tools.readSigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getInt8(0);\n case 2:\n return b.getInt16(0);\n case 4:\n return b.getInt32(0);\n default:\n return NaN;\n }\n };\n /**\n * get an floating-point number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length floating-point number\n * @returns {number} result\n */\n Tools.readFloat = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 4:\n return b.getFloat32(0);\n case 8:\n return b.getFloat64(0);\n default:\n return NaN;\n }\n };\n /**\n * get a date from a buffer\n * @static\n * @param {Buffer} buff from which to read the date\n * @return {Date} result\n */\n Tools.readDate = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return new Date(b.getUint8(0));\n case 2:\n return new Date(b.getUint16(0));\n case 4:\n return new Date(b.getUint32(0));\n case 8:\n return new Date(Number.parseInt(Tools.readHexString(buff), 16));\n default:\n return new Date(0);\n }\n };\n /**\n * Reads the data from a tag\n * @static\n * @param {TagData} tagObj The tag object to be read\n * @param {Buffer} data Data to be transformed\n * @return {Tag} result\n */\n Tools.readDataFromTag = function (tagObj, data) {\n var type = tagObj.type, name = tagObj.name;\n var track = tagObj.track;\n var discardable = tagObj.discardable || false;\n var keyframe = tagObj.keyframe || false;\n var payload = null;\n var value;\n switch (type) {\n case 'u':\n value = Tools.readUnsigned(data);\n break;\n case 'f':\n value = Tools.readFloat(data);\n break;\n case 'i':\n value = Tools.readSigned(data);\n break;\n case 's':\n value = String.fromCharCode.apply(String, data);\n break;\n case '8':\n value = Tools.readUtf8(data);\n break;\n case 'd':\n value = Tools.readDate(data);\n break;\n default:\n break;\n }\n if (name === 'SimpleBlock' || name === 'Block') {\n var p = 0;\n var _a = Tools.readVint(data, p), length_1 = _a.length, trak = _a.value;\n p += length_1;\n track = trak;\n value = Tools.readSigned(data.subarray(p, p + 2));\n p += 2;\n if (name === 'SimpleBlock') {\n keyframe = Boolean(data[length_1 + 2] & 0x80);\n discardable = Boolean(data[length_1 + 2] & 0x01);\n }\n p += 1;\n payload = data.subarray(p);\n }\n return __assign(__assign({}, tagObj), { data: data, discardable: discardable, keyframe: keyframe, payload: payload, track: track, value: value });\n };\n return Tools;\n}());\nexports.default = Tools;\n","// int64-buffer.js\n\n/*jshint -W018 */ // Confusing use of '!'.\n/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression.\n/*jshint -W093 */ // Did you mean to return a conditional instead of an assignment?\n\nvar Uint64BE, Int64BE, Uint64LE, Int64LE;\n\n!function(exports) {\n // constants\n\n var UNDEFINED = \"undefined\";\n var BUFFER = (UNDEFINED !== typeof Buffer) && Buffer;\n var UINT8ARRAY = (UNDEFINED !== typeof Uint8Array) && Uint8Array;\n var ARRAYBUFFER = (UNDEFINED !== typeof ArrayBuffer) && ArrayBuffer;\n var ZERO = [0, 0, 0, 0, 0, 0, 0, 0];\n var isArray = Array.isArray || _isArray;\n var BIT32 = 4294967296;\n var BIT24 = 16777216;\n\n // storage class\n\n var storage; // Array;\n\n // generate classes\n\n Uint64BE = factory(\"Uint64BE\", true, true);\n Int64BE = factory(\"Int64BE\", true, false);\n Uint64LE = factory(\"Uint64LE\", false, true);\n Int64LE = factory(\"Int64LE\", false, false);\n\n // class factory\n\n function factory(name, bigendian, unsigned) {\n var posH = bigendian ? 0 : 4;\n var posL = bigendian ? 4 : 0;\n var pos0 = bigendian ? 0 : 3;\n var pos1 = bigendian ? 1 : 2;\n var pos2 = bigendian ? 2 : 1;\n var pos3 = bigendian ? 3 : 0;\n var fromPositive = bigendian ? fromPositiveBE : fromPositiveLE;\n var fromNegative = bigendian ? fromNegativeBE : fromNegativeLE;\n var proto = Int64.prototype;\n var isName = \"is\" + name;\n var _isInt64 = \"_\" + isName;\n\n // properties\n proto.buffer = void 0;\n proto.offset = 0;\n proto[_isInt64] = true;\n\n // methods\n proto.toNumber = toNumber;\n proto.toString = toString;\n proto.toJSON = toNumber;\n proto.toArray = toArray;\n\n // add .toBuffer() method only when Buffer available\n if (BUFFER) proto.toBuffer = toBuffer;\n\n // add .toArrayBuffer() method only when Uint8Array available\n if (UINT8ARRAY) proto.toArrayBuffer = toArrayBuffer;\n\n // isUint64BE, isInt64BE\n Int64[isName] = isInt64;\n\n // CommonJS\n exports[name] = Int64;\n\n return Int64;\n\n // constructor\n function Int64(buffer, offset, value, raddix) {\n if (!(this instanceof Int64)) return new Int64(buffer, offset, value, raddix);\n return init(this, buffer, offset, value, raddix);\n }\n\n // isUint64BE, isInt64BE\n function isInt64(b) {\n return !!(b && b[_isInt64]);\n }\n\n // initializer\n function init(that, buffer, offset, value, raddix) {\n if (UINT8ARRAY && ARRAYBUFFER) {\n if (buffer instanceof ARRAYBUFFER) buffer = new UINT8ARRAY(buffer);\n if (value instanceof ARRAYBUFFER) value = new UINT8ARRAY(value);\n }\n\n // Int64BE() style\n if (!buffer && !offset && !value && !storage) {\n // shortcut to initialize with zero\n that.buffer = newArray(ZERO, 0);\n return;\n }\n\n // Int64BE(value, raddix) style\n if (!isValidBuffer(buffer, offset)) {\n var _storage = storage || Array;\n raddix = offset;\n value = buffer;\n offset = 0;\n buffer = (storage === BUFFER) ? BUFFER.alloc(8) : new _storage(8);\n }\n\n that.buffer = buffer;\n that.offset = offset |= 0;\n\n // Int64BE(buffer, offset) style\n if (UNDEFINED === typeof value) return;\n\n // Int64BE(buffer, offset, value, raddix) style\n if (\"string\" === typeof value) {\n fromString(buffer, offset, value, raddix || 10);\n } else if (isValidBuffer(value, raddix)) {\n fromArray(buffer, offset, value, raddix);\n } else if (\"number\" === typeof raddix) {\n writeInt32(buffer, offset + posH, value); // high\n writeInt32(buffer, offset + posL, raddix); // low\n } else if (value > 0) {\n fromPositive(buffer, offset, value); // positive\n } else if (value < 0) {\n fromNegative(buffer, offset, value); // negative\n } else {\n fromArray(buffer, offset, ZERO, 0); // zero, NaN and others\n }\n }\n\n function fromString(buffer, offset, str, raddix) {\n var pos = 0;\n var len = str.length;\n var high = 0;\n var low = 0;\n if (str[0] === \"-\") pos++;\n var sign = pos;\n while (pos < len) {\n var chr = parseInt(str[pos++], raddix);\n if (!(chr >= 0)) break; // NaN\n low = low * raddix + chr;\n high = high * raddix + Math.floor(low / BIT32);\n low %= BIT32;\n }\n if (sign) {\n high = ~high;\n if (low) {\n low = BIT32 - low;\n } else {\n high++;\n }\n }\n writeInt32(buffer, offset + posH, high);\n writeInt32(buffer, offset + posL, low);\n }\n\n function toNumber() {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n if (!unsigned) high |= 0; // a trick to get signed\n return high ? (high * BIT32 + low) : low;\n }\n\n function toString(radix) {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n var str = \"\";\n var sign = !unsigned && (high & 0x80000000);\n if (sign) {\n high = ~high;\n low = BIT32 - low;\n }\n radix = radix || 10;\n while (1) {\n var mod = (high % radix) * BIT32 + low;\n high = Math.floor(high / radix);\n low = Math.floor(mod / radix);\n str = (mod % radix).toString(radix) + str;\n if (!high && !low) break;\n }\n if (sign) {\n str = \"-\" + str;\n }\n return str;\n }\n\n function writeInt32(buffer, offset, value) {\n buffer[offset + pos3] = value & 255;\n value = value >> 8;\n buffer[offset + pos2] = value & 255;\n value = value >> 8;\n buffer[offset + pos1] = value & 255;\n value = value >> 8;\n buffer[offset + pos0] = value & 255;\n }\n\n function readInt32(buffer, offset) {\n return (buffer[offset + pos0] * BIT24) +\n (buffer[offset + pos1] << 16) +\n (buffer[offset + pos2] << 8) +\n buffer[offset + pos3];\n }\n }\n\n function toArray(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = null; // Array\n\n if (raw !== false && isArray(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n return newArray(buffer, offset);\n }\n\n function toBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = BUFFER;\n\n if (raw !== false && BUFFER.isBuffer(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n // Buffer.from(arraybuffer) available since Node v4.5.0\n // https://nodejs.org/en/blog/release/v4.5.0/\n return BUFFER.from(toArrayBuffer.call(this, raw));\n }\n\n function toArrayBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n var arrbuf = buffer.buffer;\n storage = UINT8ARRAY;\n\n // arrbuf.slice() ignores buffer.offset until Node v8.0.0\n if (raw !== false && !buffer.offset && (arrbuf instanceof ARRAYBUFFER)) {\n return (arrbuf.byteLength === 8) ? arrbuf : arrbuf.slice(offset, offset + 8);\n }\n\n var dest = new UINT8ARRAY(8);\n fromArray(dest, 0, buffer, offset);\n return dest.buffer;\n }\n\n function isValidBuffer(buffer, offset) {\n var len = buffer && buffer.length;\n offset |= 0;\n return len && (offset + 8 <= len) && (\"string\" !== typeof buffer[offset]);\n }\n\n function fromArray(destbuf, destoff, srcbuf, srcoff) {\n destoff |= 0;\n srcoff |= 0;\n for (var i = 0; i < 8; i++) {\n destbuf[destoff++] = srcbuf[srcoff++] & 255;\n }\n }\n\n function newArray(buffer, offset) {\n return Array.prototype.slice.call(buffer, offset, offset + 8);\n }\n\n function fromPositiveBE(buffer, offset, value) {\n var pos = offset + 8;\n while (pos > offset) {\n buffer[--pos] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeBE(buffer, offset, value) {\n var pos = offset + 8;\n value++;\n while (pos > offset) {\n buffer[--pos] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n function fromPositiveLE(buffer, offset, value) {\n var end = offset + 8;\n while (offset < end) {\n buffer[offset++] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeLE(buffer, offset, value) {\n var end = offset + 8;\n value++;\n while (offset < end) {\n buffer[offset++] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n // https://github.com/retrofox/is-array\n function _isArray(val) {\n return !!val && \"[object Array]\" == Object.prototype.toString.call(val);\n }\n\n}(typeof exports === 'object' && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n","var BufferReader = require('./lib/buffer-reader')\n\nvar XIPH_LACING = 1\nvar EBML_LACING = 3\nvar FIXED_SIZE_LACING = 2\n\nmodule.exports = function (buffer) {\n var block = {}\n var reader = new BufferReader(buffer)\n\n block.trackNumber = reader.nextUIntV()\n block.timecode = reader.nextInt16BE()\n\n var flags = reader.nextUInt8()\n\n block.invisible = !!(flags & 0x8)\n\n // only valid for SimpleBlock\n block.keyframe = !!(flags & 0x80)\n block.discardable = !!(flags & 0x1)\n\n var lacing = (flags & 0x6) >> 1\n\n block.frames = readLacedData(reader, lacing)\n\n return block\n}\n\nfunction readLacedData (reader, lacing) {\n if (!lacing) return [reader.nextBuffer()]\n\n var i, frameSize\n var frames = []\n var framesNum = reader.nextUInt8() + 1 // number of frames\n\n if (lacing === FIXED_SIZE_LACING) {\n // remaining data should be divisible by the number of frames\n if (reader.length % framesNum !== 0) throw new Error('Fixed-Size Lacing Error')\n\n frameSize = reader.length / framesNum\n for (i = 0; i < framesNum; i++) {\n frames.push(reader.nextBuffer(frameSize))\n }\n return frames\n }\n\n var frameSizes = []\n\n if (lacing === XIPH_LACING) {\n for (i = 0; i < framesNum - 1; i++) {\n var val\n frameSize = 0\n do {\n val = reader.nextUInt8()\n frameSize += val\n } while (val === 0xff)\n frameSizes.push(frameSize)\n }\n } else if (lacing === EBML_LACING) {\n // first frame\n frameSize = reader.nextUIntV()\n frameSizes.push(frameSize)\n\n // middle frames\n for (i = 1; i < framesNum - 1; i++) {\n frameSize += reader.nextIntV()\n frameSizes.push(frameSize)\n }\n }\n\n for (i = 0; i < framesNum - 1; i++) {\n frames.push(reader.nextBuffer(frameSizes[i]))\n }\n\n // last frame (remaining buffer)\n frames.push(reader.nextBuffer())\n\n return frames\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tools = exports.Reader = exports.Encoder = exports.Decoder = void 0;\n__exportStar(require(\"./EBML\"), exports);\nvar EBMLDecoder_1 = require(\"./EBMLDecoder\");\nexports.Decoder = EBMLDecoder_1.default;\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nexports.Encoder = EBMLEncoder_1.default;\nvar EBMLReader_1 = require(\"./EBMLReader\");\nexports.Reader = EBMLReader_1.default;\nvar tools = require(\"./tools\");\nexports.tools = tools;\n","// https://github.com/themasch/node-ebml/blob/master/lib/ebml/tools.js\nmodule.exports = function (buffer, start, signed) {\n start = start || 0\n for (var length = 1; length <= 8; length++) {\n if (buffer[start] >= Math.pow(2, 8 - length)) {\n break\n }\n }\n if (length > 8) {\n throw new Error('Unrepresentable length: ' + length + ' ' +\n buffer.toString('hex', start, start + length))\n }\n if (start + length > buffer.length) {\n return null\n }\n var i\n var value = buffer[start] & (1 << (8 - length)) - 1\n for (i = 1; i < length; i++) {\n if (i === 7) {\n if (value >= Math.pow(2, 53 - 8) && buffer[start + 7] > 0) {\n return {\n length: length,\n value: -1\n }\n }\n }\n value *= Math.pow(2, 8)\n value += buffer[start + i]\n }\n if (signed) {\n value -= Math.pow(2, length * 7 - 1) - 1\n }\n return {\n length: length,\n value: value\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools = require(\"./tools\");\nvar tools_1 = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar EBMLEncoder = /** @class */ (function () {\n function EBMLEncoder() {\n this._schema = ebmlID_1.byEbmlID;\n this._buffers = [];\n this._stack = [];\n }\n EBMLEncoder.prototype.encode = function (elms) {\n var _this = this;\n return tools.concat(elms.reduce(function (lst, elm) {\n return lst.concat(_this.encodeChunk(elm));\n }, [])).buffer;\n };\n EBMLEncoder.prototype.encodeChunk = function (elm) {\n if (elm.type === \"m\") {\n if (!elm.isEnd) {\n this.startTag(elm);\n }\n else {\n this.endTag(elm);\n }\n }\n else {\n // ensure that we are working with an internal `Buffer` instance\n elm.data = tools_1.Buffer.from(elm.data);\n this.writeTag(elm);\n }\n return this.flush();\n };\n EBMLEncoder.prototype.flush = function () {\n var ret = this._buffers;\n this._buffers = [];\n return ret;\n };\n EBMLEncoder.prototype.getSchemaInfo = function (tagName) {\n var tagNums = Object.keys(this._schema).map(Number);\n for (var i = 0; i < tagNums.length; i++) {\n var tagNum = tagNums[i];\n if (this._schema[tagNum].name === tagName) {\n return new tools_1.Buffer(tagNum.toString(16), 'hex');\n }\n }\n return null;\n };\n EBMLEncoder.prototype.writeTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n var tagData = elm.data;\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n var data = tools.encodeTag(tagId, tagData);\n /**\n * 親要素が閉じタグあり(isEnd)なら閉じタグが来るまで待つ(children queに入る)\n */\n if (this._stack.length > 0) {\n var last = this._stack[this._stack.length - 1];\n last.children.push({\n tagId: tagId,\n elm: elm,\n children: [],\n data: data\n });\n return;\n }\n this._buffers = this._buffers.concat(data);\n return;\n };\n EBMLEncoder.prototype.startTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n /**\n * 閉じタグ不定長の場合はスタックに積まずに即時バッファに書き込む\n */\n if (elm.unknownSize) {\n var data = tools.encodeTag(tagId, new tools_1.Buffer(0), elm.unknownSize);\n this._buffers = this._buffers.concat(data);\n return;\n }\n var tag = {\n tagId: tagId,\n elm: elm,\n children: [],\n data: null\n };\n if (this._stack.length > 0) {\n this._stack[this._stack.length - 1].children.push(tag);\n }\n this._stack.push(tag);\n };\n EBMLEncoder.prototype.endTag = function (elm) {\n var tagName = elm.name;\n var tag = this._stack.pop();\n if (tag == null) {\n throw new Error(\"EBML structure is broken\");\n }\n if (tag.elm.name !== elm.name) {\n throw new Error(\"EBML structure is broken\");\n }\n var childTagDataBuffers = tag.children.reduce(function (lst, child) {\n if (child.data === null) {\n throw new Error(\"EBML structure is broken\");\n }\n return lst.concat(child.data);\n }, []);\n var childTagDataBuffer = tools.concat(childTagDataBuffers);\n if (tag.elm.type === \"m\") {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer, tag.elm.unknownSize);\n }\n else {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer);\n }\n if (this._stack.length < 1) {\n this._buffers = this._buffers.concat(tag.data);\n }\n };\n return EBMLEncoder;\n}());\nexports.default = EBMLEncoder;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar int64_buffer_1 = require(\"int64-buffer\");\nvar tools_1 = require(\"./tools\");\nvar tools = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar State;\n(function (State) {\n State[State[\"STATE_TAG\"] = 1] = \"STATE_TAG\";\n State[State[\"STATE_SIZE\"] = 2] = \"STATE_SIZE\";\n State[State[\"STATE_CONTENT\"] = 3] = \"STATE_CONTENT\";\n})(State || (State = {}));\nvar EBMLDecoder = /** @class */ (function () {\n function EBMLDecoder() {\n this._buffer = new tools_1.Buffer(0);\n this._tag_stack = [];\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._total = 0;\n this._schema = ebmlID_1.byEbmlID;\n this._result = [];\n }\n EBMLDecoder.prototype.decode = function (chunk) {\n this.readChunk(chunk);\n var diff = this._result;\n this._result = [];\n return diff;\n };\n EBMLDecoder.prototype.readChunk = function (chunk) {\n // 読みかけの(読めなかった) this._buffer と 新しい chunk を合わせて読み直す\n this._buffer = tools.concat([this._buffer, new tools_1.Buffer(chunk)]);\n while (this._cursor < this._buffer.length) {\n // console.log(this._cursor, this._total, this._tag_stack);\n if (this._state === State.STATE_TAG && !this.readTag()) {\n break;\n }\n if (this._state === State.STATE_SIZE && !this.readSize()) {\n break;\n }\n if (this._state === State.STATE_CONTENT && !this.readContent()) {\n break;\n }\n }\n };\n EBMLDecoder.prototype.getSchemaInfo = function (tagNum) {\n return this._schema[tagNum] || {\n name: \"unknown\",\n level: -1,\n type: \"unknown\",\n description: \"unknown\"\n };\n };\n /**\n * vint された parsing tag\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readTag = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml id vint without first byte\n var tag = (0, tools_1.readVint)(this._buffer, this._cursor);\n // tag が読めなかった\n if (tag == null) {\n return false;\n }\n // >>>>>>>>>\n // tag 識別子\n //const tagStr = this._buffer.toString(\"hex\", this._cursor, this._cursor + tag.length);\n //const tagNum = parseInt(tagStr, 16);\n // 上と等価\n var buf = this._buffer.slice(this._cursor, this._cursor + tag.length);\n var tagNum = buf.reduce(function (o, v, i, arr) { return o + v * Math.pow(16, 2 * (arr.length - 1 - i)); }, 0);\n var schema = this.getSchemaInfo(tagNum);\n var tagObj = {\n EBML_ID: tagNum.toString(16),\n schema: schema,\n type: schema.type,\n name: schema.name,\n level: schema.level,\n tagStart: this._total,\n tagEnd: this._total + tag.length,\n sizeStart: this._total + tag.length,\n sizeEnd: null,\n dataStart: null,\n dataEnd: null,\n dataSize: null,\n data: null\n };\n // | tag: vint | size: vint | data: Buffer(size) |\n this._tag_stack.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._cursor += tag.length;\n this._total += tag.length;\n // 読み込み状態変更\n this._state = State.STATE_SIZE;\n return true;\n };\n /**\n * vint された現在のタグの内容の大きさを読み込む\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readSize = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml datasize vint without first byte\n var size = (0, tools_1.readVint)(this._buffer, this._cursor);\n // まだ読めない\n if (size == null) {\n return false;\n }\n // >>>>>>>>>\n // current tag の data size 決定\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n tagObj.sizeEnd = tagObj.sizeStart + size.length;\n tagObj.dataStart = tagObj.sizeEnd;\n tagObj.dataSize = size.value;\n if (size.value === -1) {\n // unknown size\n tagObj.dataEnd = -1;\n if (tagObj.type === \"m\") {\n tagObj.unknownSize = true;\n }\n }\n else {\n tagObj.dataEnd = tagObj.sizeEnd + size.value;\n }\n // <<<<<<<<\n // ポインタを進める\n this._cursor += size.length;\n this._total += size.length;\n this._state = State.STATE_CONTENT;\n return true;\n };\n /**\n * データ読み込み\n */\n EBMLDecoder.prototype.readContent = function () {\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n // master element は子要素を持つので生データはない\n if (tagObj.type === 'm') {\n // console.log('content should be tags');\n tagObj.isEnd = false;\n this._result.push(tagObj);\n this._state = State.STATE_TAG;\n // この Mastert Element は空要素か\n if (tagObj.dataSize === 0) {\n // 即座に終了タグを追加\n var elm = Object.assign({}, tagObj, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop(); // スタックからこのタグを捨てる\n }\n return true;\n }\n // waiting for more data\n if (this._buffer.length < this._cursor + tagObj.dataSize) {\n return false;\n }\n // タグの中身の生データ\n var data = this._buffer.slice(this._cursor, this._cursor + tagObj.dataSize);\n // 読み終わったバッファを捨てて読み込んでいる部分のバッファのみ残す\n this._buffer = this._buffer.slice(this._cursor + tagObj.dataSize);\n tagObj.data = data;\n // >>>>>>>>>\n switch (tagObj.type) {\n //case \"m\": break;\n // Master-Element - contains other EBML sub-elements of the next lower level\n case \"u\":\n tagObj.value = data.readUIntBE(0, data.length);\n break;\n // Unsigned Integer - Big-endian, any size from 1 to 8 octets\n case \"i\":\n tagObj.value = data.readIntBE(0, data.length);\n break;\n // Signed Integer - Big-endian, any size from 1 to 8 octets\n case \"f\":\n tagObj.value = tagObj.dataSize === 4 ? data.readFloatBE(0) :\n tagObj.dataSize === 8 ? data.readDoubleBE(0) :\n (console.warn(\"cannot read \".concat(tagObj.dataSize, \" octets float. failback to 0\")), 0);\n break;\n // Float - Big-endian, defined for 4 and 8 octets (32, 64 bits)\n case \"s\":\n tagObj.value = data.toString(\"ascii\");\n break; // ascii\n // Printable ASCII (0x20 to 0x7E), zero-padded when needed\n case \"8\":\n tagObj.value = data.toString(\"utf8\");\n break;\n // Unicode string, zero padded when needed (RFC 2279)\n case \"b\":\n tagObj.value = data;\n break;\n // Binary - not interpreted by the parser\n case \"d\":\n tagObj.value = (0, tools_1.convertEBMLDateToJSDate)(new int64_buffer_1.Int64BE(data).toNumber());\n break;\n // nano second; Date.UTC(2001,1,1,0,0,0,0) === 980985600000\n // Date - signed 8 octets integer in nanoseconds with 0 indicating \n // the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)\n }\n if (tagObj.value === null) {\n throw new Error(\"unknown tag type:\" + tagObj.type);\n }\n this._result.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._total += tagObj.dataSize;\n // タグ待ちモードに変更\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._tag_stack.pop(); // remove the object from the stack\n while (this._tag_stack.length > 0) {\n var topEle = this._tag_stack[this._tag_stack.length - 1];\n // 親が不定長サイズなので閉じタグは期待できない\n if (topEle.dataEnd < 0) {\n this._tag_stack.pop(); // 親タグを捨てる\n return true;\n }\n // 閉じタグの来るべき場所まで来たかどうか\n if (this._total < topEle.dataEnd) {\n break;\n }\n // 閉じタグを挿入すべきタイミングが来た\n if (topEle.type !== \"m\") {\n throw new Error(\"parent element is not master element\");\n }\n var elm = Object.assign({}, topEle, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop();\n }\n return true;\n };\n return EBMLDecoder;\n}());\nexports.default = EBMLDecoder;\n"],"names":["exports","read","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","i","d","s","NaN","Infinity","Math","pow","write","value","c","rt","abs","isNaN","floor","log","LN2","Object","defineProperty","byEbmlID","name","level","type","multiple","minver","webm","description","mandatory","range","cppname","bytesize","divx","position","type2","crc","extendStatics","__extends","this","b","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","events_1","tools","EBMLReader","_super","_this","logGroup","hasLoggingStarted","metadataloaded","chunks","stack","segmentOffset","last2SimpleBlockVideoTrackTimecode","last2SimpleBlockAudioTrackTimecode","lastClusterTimecode","lastClusterPosition","timecodeScale","metadataSize","metadatas","cues","firstVideoBlockRead","firstAudioBlockRead","currentTrack","TrackNumber","TrackType","DefaultDuration","CodecDelay","trackTypes","trackDefaultDuration","trackCodecDelay","trackInfo","ended","logging","use_duration_every_simpleblock","use_webp","use_segment_info","drop_default_duration","stop","emit_segment_info","length","pop","console","groupEnd","data","timecode","duration","emit","videoTrackNum","indexOf","audioTrackNum","trackNumber","elm","drop","isEnd","parent_1","dataEnd","dataSize","dataStart","unknownSize","o","assign","push","warn","_a","ebmlBlock","frames_1","frames","CueTime","CueTrack","CueClusterPosition","forEach","frame","slice","toString","webpBuf","VP8BitStreamToRiffWebPBuffer","webp","Blob","currentTime","tagStart","put","get","defaultDuration","codecDelay","lastTimecode","_defaultDuration","delay","enumerable","configurable","addListener","event","listener","groupCollapsed","group","EventEmitter","convertEBMLDateToJSDate","createFloatBuffer","createIntBuffer","createUIntBuffer","encodeValueToBuffer","concat","putRefinedMetaData","extractElement","removeElement","makeMetadataSeekable","createRIFFChunk","WebPBlockFilter","encodeTag","readBlock","writeVint","readVint","Buffer","int64_buffer_1","EBMLEncoder_1","_Buffer","tools_ebml_1","_block","FourCC","chunk","chunkSize","writeUInt32LE","byteLength","substr","idName","metadata","start","element","splice","Error","result","encodedSizeOfEbml","refinedMetaData","encorder","default","reduce","lst","encode","buf","refineMetadata","mesetadata","sizeDiff","info","clusterPtrs","_metadata","overwrited_1","insertTag","isArray","cueInfos","create_cue","seekhead_children","seeks","create_seek_from_clusters","tagName","children","insertHead","idx","apply","reverse","unshift","list","bytes","Uint64BE","toBuffer","writeUIntBE","Int64BE","writeIntBE","writeDoubleBE","writeFloatBE","tagId","tagData","elms","some","VP8Chunk","originalMetadata","cuesInfo","header","segmentContentStartPos","originalMetadataSize","infoSize","tracks","tracksSize","seekHeadSize","seekHead","cuesSize","lastSizeDifference","_loop_1","infoStart","tracksStart","cuesStart","sizeDifference","maxIterations","finalMetadata","ebml","payload","i_1","shift","originalPayloadOffsetEnd","ebmlSize","offsetDiff","payloadSize","segmentTagBuf","segmentSizeBuf","_segmentSize","newPayloadSize","refined","newNewRefinedSize","getTime","int64str","Date","Number","vint","BufferReader","nextInt16BE","readInt16BE","nextUInt8","readUInt8","nextUIntV","v","nextIntV","nextBuffer","module","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","done","then","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","op","ebml_1","blob","decoder","reader","readstream","readerBlob","refinedMetadataBuf","refinedMetadataBlob","firstPartBlobWithoutMetadata","_b","Decoder","Reader","stream","getReader","decode","filter","__assign","arguments","__spreadArray","to","from","pack","ar","l","tools_1","Tools","log2","number","readHexString","alloc","val","concatenate","a1","a2","buff","end","map","q","acc","current","padStart","readUtf8","exception","readUnsigned","DataView","byteOffset","getUint8","getUint16","getUint32","readSigned","getInt8","getInt16","getInt32","readFloat","getFloat32","getFloat64","readDate","parseInt","readDataFromTag","tagObj","track","discardable","keyframe","fromCharCode","length_1","subarray","Boolean","storage","UNDEFINED","BUFFER","UINT8ARRAY","Uint8Array","ARRAYBUFFER","ArrayBuffer","ZERO","BIT32","factory","bigendian","unsigned","posH","posL","pos0","pos1","pos2","pos3","fromPositive","fromPositiveBE","fromPositiveLE","fromNegative","fromNegativeBE","fromNegativeLE","proto","Int64","isName","_isInt64","toNumber","radix","high","readInt32","low","str","sign","mod","toJSON","toArray","toArrayBuffer","raddix","that","newArray","isValidBuffer","_storage","pos","len","chr","writeInt32","fromString","fromArray","init","raw","isBuffer","arrbuf","dest","destbuf","destoff","srcbuf","srcoff","nodeName","block","flags","invisible","lacing","frameSize","framesNum","frameSizes","readLacedData","__createBinding","k","k2","undefined","__exportStar","Encoder","EBMLDecoder_1","EBMLReader_1","signed","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","once","emitter","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","handler","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","warned","w","count","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","listeners","prependListener","prependOnceListener","originalListener","index","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","join","code","tripletToBase64","num","output","ebmlID_1","EBMLEncoder","_schema","_buffers","_stack","endTag","startTag","writeTag","flush","getSchemaInfo","tagNums","tagNum","tag","childTagDataBuffers","child","childTagDataBuffer","base64","ieee754","customInspectSymbol","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","encodingOrOffset","allocUnsafe","string","encoding","isEncoding","actual","isView","arrayView","isInstance","fromArrayBuffer","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","obj","checked","numberIsNaN","fromObject","toPrimitive","assertSize","size","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","out","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeDoubleLE","targetStart","copyWithin","errors","E","sym","getMessage","Base","super","writable","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","State","EBMLDecoder","_buffer","_tag_stack","_state","STATE_TAG","_cursor","_total","_result","readChunk","diff","readTag","STATE_SIZE","readSize","STATE_CONTENT","readContent","schema","EBML_ID","tagEnd","sizeStart","sizeEnd","topEle"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"537.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./node_modules/ieee754/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/ebmlID.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLReader.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/buffer-reader.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/tools-ebml.js","webpack://tinode-webapp/./node_modules/int64-buffer/int64-buffer.js","webpack://tinode-webapp/./node_modules/ebml-block/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/index.js","webpack://tinode-webapp/./node_modules/ebml-block/lib/vint.js","webpack://tinode-webapp/./node_modules/events/events.js","webpack://tinode-webapp/./node_modules/base64-js/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBML.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js","webpack://tinode-webapp/./node_modules/buffer/index.js","webpack://tinode-webapp/./node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js"],"sourcesContent":["/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","\"use strict\";\n// source: https://www.matroska.org/technical/elements.html\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byEbmlID = void 0;\nexports.byEbmlID = {\n 0x80: {\n name: \"ChapterDisplay\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all possible strings to use for the chapter display.\"\n },\n 0x83: {\n name: \"TrackType\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"1-254\",\n description: \"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).\"\n },\n 0x85: {\n name: \"ChapString\",\n cppname: \"ChapterString\",\n level: 5,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Contains the string to use as the chapter atom.\"\n },\n 0x86: {\n name: \"CodecID\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n description: \"An ID corresponding to the codec, see the codec page for more info.\"\n },\n 0x88: {\n name: \"FlagDefault\",\n cppname: \"TrackFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)\"\n },\n 0x89: {\n name: \"ChapterTrackNumber\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.\"\n },\n 0x91: {\n name: \"ChapterTimeStart\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n description: \"Timestamp of the start of Chapter (not scaled).\"\n },\n 0x92: {\n name: \"ChapterTimeEnd\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Timestamp of the end of Chapter (timestamp excluded, not scaled).\"\n },\n 0x96: {\n name: \"CueRefTime\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n description: \"Timestamp of the referenced Block.\"\n },\n 0x97: {\n name: \"CueRefCluster\",\n level: 5,\n type: \"u\",\n mandatory: true,\n webm: false,\n description: \"The Position of the Cluster containing the referenced Block.\"\n },\n 0x98: {\n name: \"ChapterFlagHidden\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x4254: {\n name: \"ContentCompAlgo\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\", \"\", \"\" ],\n // \"del\": [ \"1 - bzlib,\", \"2 - lzo1x\" ],\n description: \"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping\"\n },\n 0x4255: {\n name: \"ContentCompSettings\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.\"\n },\n 0x4282: {\n name: \"DocType\",\n level: 1,\n type: \"s\",\n mandatory: true,\n \"default\": \"matroska\",\n minver: 1,\n description: \"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files.\"\n },\n 0x4285: {\n name: \"DocTypeReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum DocType version an interpreter has to support to read this file.\"\n },\n 0x4286: {\n name: \"EBMLVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of EBML parser used to create the file.\"\n },\n 0x4287: {\n name: \"DocTypeVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The version of DocType interpreter used to create the file.\"\n },\n 0x4444: {\n name: \"SegmentFamily\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A randomly generated unique ID that all segments related to each other must use (128 bits).\"\n },\n 0x4461: {\n name: \"DateUTC\",\n level: 2,\n type: \"d\",\n minver: 1,\n description: \"Date of the origin of timestamp (value 0), i.e. production date.\"\n },\n 0x4484: {\n name: \"TagDefault\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Indication to know if this is the default/original language to use for the given tag. (1 bit)\"\n },\n 0x4485: {\n name: \"TagBinary\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.\"\n },\n 0x4487: {\n name: \"TagString\",\n level: 4,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"The value of the Element.\"\n },\n 0x4489: {\n name: \"Duration\",\n level: 2,\n type: \"f\",\n minver: 1,\n range: \"> 0\",\n description: \"Duration of the segment (based on TimecodeScale).\"\n },\n 0x4598: {\n name: \"ChapterFlagEnabled\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)\"\n },\n 0x4660: {\n name: \"FileMimeType\",\n level: 3,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"MIME type of the file.\"\n },\n 0x4661: {\n name: \"FileUsedStartTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4662: {\n name: \"FileUsedEndTime\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX font extension\"\n },\n 0x4675: {\n name: \"FileReferral\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A binary value that a track/codec can refer to when the attachment is needed.\"\n },\n 0x5031: {\n name: \"ContentEncodingOrder\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.\"\n },\n 0x5032: {\n name: \"ContentEncodingScope\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n // \"br\": [ \"\", \"\", \"\" ],\n description: \"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)\"\n },\n 0x5033: {\n name: \"ContentEncodingType\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption\"\n },\n 0x5034: {\n name: \"ContentCompression\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.\"\n },\n 0x5035: {\n name: \"ContentEncryption\",\n level: 5,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.\"\n },\n 0x5378: {\n name: \"CueBlockNumber\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the Block in the specified Cluster.\"\n },\n 0x5654: {\n name: \"ChapterStringUID\",\n level: 4,\n type: \"8\",\n mandatory: false,\n minver: 3,\n webm: true,\n description: \"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage.\"\n },\n 0x5741: {\n name: \"WritingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Writing application (\\\"mkvmerge-0.3.3\\\").\"\n },\n 0x5854: {\n name: \"SilentTracks\",\n cppname: \"ClusterSilentTracks\",\n level: 2,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.\"\n },\n 0x6240: {\n name: \"ContentEncoding\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Settings for one content encoding like compression or encryption.\"\n },\n 0x6264: {\n name: \"BitDepth\",\n cppname: \"AudioBitDepth\",\n level: 4,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Bits per sample, mostly used for PCM.\"\n },\n 0x6532: {\n name: \"SignedElement\",\n level: 3,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"An element ID whose data will be used to compute the signature.\"\n },\n 0x6624: {\n name: \"TrackTranslate\",\n level: 3,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The track identification for the given Chapter Codec.\"\n },\n 0x6911: {\n name: \"ChapProcessCommand\",\n cppname: \"ChapterProcessCommand\",\n level: 5,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6922: {\n name: \"ChapProcessTime\",\n cppname: \"ChapterProcessTime\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).\"\n },\n 0x6924: {\n name: \"ChapterTranslate\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"A tuple of corresponding ID used by chapter codecs to represent this segment.\"\n },\n 0x6933: {\n name: \"ChapProcessData\",\n cppname: \"ChapterProcessData\",\n level: 6,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.\"\n },\n 0x6944: {\n name: \"ChapProcess\",\n cppname: \"ChapterProcess\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains all the commands associated to the Atom.\"\n },\n 0x6955: {\n name: \"ChapProcessCodecID\",\n cppname: \"ChapterProcessCodecID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.\"\n },\n 0x7373: {\n name: \"Tag\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters.\"\n },\n 0x7384: {\n name: \"SegmentFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A filename corresponding to this segment.\"\n },\n 0x7446: {\n name: \"AttachmentLink\",\n cppname: \"TrackAttachmentLink\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The UID of an attachment that is used by this codec.\"\n },\n 0x258688: {\n name: \"CodecName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable string specifying the codec.\"\n },\n 0x18538067: {\n name: \"Segment\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.\"\n },\n 0x447a: {\n name: \"TagLanguage\",\n level: 4,\n type: \"s\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": \"und\",\n description: \"Specifies the language of the tag specified, in the Matroska languages form.\"\n },\n 0x45a3: {\n name: \"TagName\",\n level: 4,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The name of the Tag that is going to be stored.\"\n },\n 0x67c8: {\n name: \"SimpleTag\",\n cppname: \"TagSimple\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contains general information about the target.\"\n },\n 0x63c6: {\n name: \"TagAttachmentUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.\"\n },\n 0x63c4: {\n name: \"TagChapterUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.\"\n },\n 0x63c9: {\n name: \"TagEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.\"\n },\n 0x63c5: {\n name: \"TagTrackUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.\"\n },\n 0x63ca: {\n name: \"TargetType\",\n cppname: \"TagTargetType\",\n level: 4,\n type: \"s\",\n minver: 1,\n webm: false,\n \"strong\": \"informational\",\n description: \"An string that can be used to display the logical level of the target like \\\"ALBUM\\\", \\\"TRACK\\\", \\\"MOVIE\\\", \\\"CHAPTER\\\", etc (see TargetType).\"\n },\n 0x68ca: {\n name: \"TargetTypeValue\",\n cppname: \"TagTargetTypeValue\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 50,\n description: \"A number to indicate the logical level of the target (see TargetType).\"\n },\n 0x63c0: {\n name: \"Targets\",\n cppname: \"TagTargets\",\n level: 3,\n type: \"m\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment.\"\n },\n 0x1254c367: {\n name: \"Tags\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here.\"\n },\n 0x450d: {\n name: \"ChapProcessPrivate\",\n cppname: \"ChapterProcessPrivate\",\n level: 5,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the \\\"DVD level\\\" equivalent.\"\n },\n 0x437e: {\n name: \"ChapCountry\",\n cppname: \"ChapterCountry\",\n level: 5,\n type: \"s\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"The countries corresponding to the string, same 2 octets as in Internet domains.\"\n },\n 0x437c: {\n name: \"ChapLanguage\",\n cppname: \"ChapterLanguage\",\n level: 5,\n type: \"s\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n \"default\": \"eng\",\n description: \"The languages corresponding to the string, in the bibliographic ISO-639-2 form.\"\n },\n 0x8f: {\n name: \"ChapterTrack\",\n level: 4,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"List of tracks on which the chapter applies. If this element is not present, all tracks apply\"\n },\n 0x63c3: {\n name: \"ChapterPhysicalEquiv\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"Specify the physical equivalent of this ChapterAtom like \\\"DVD\\\" (60) or \\\"SIDE\\\" (50), see complete list of values.\"\n },\n 0x6ebc: {\n name: \"ChapterSegmentEditionUID\",\n level: 4,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"The EditionUID to play from the segment linked in ChapterSegmentUID.\"\n },\n 0x6e67: {\n name: \"ChapterSegmentUID\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \">0\",\n bytesize: 16,\n description: \"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.\"\n },\n 0x73c4: {\n name: \"ChapterUID\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: true,\n range: \"not 0\",\n description: \"A unique ID to identify the Chapter.\"\n },\n 0xb6: {\n name: \"ChapterAtom\",\n level: 3,\n \"recursive\": \"1\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains the atom information to use as the chapter atom (apply to all tracks).\"\n },\n 0x45dd: {\n name: \"EditionFlagOrdered\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)\"\n },\n 0x45db: {\n name: \"EditionFlagDefault\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If a flag is set (1) the edition should be used as the default one. (1 bit)\"\n },\n 0x45bd: {\n name: \"EditionFlagHidden\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n range: \"0-1\",\n description: \"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)\"\n },\n 0x45bc: {\n name: \"EditionUID\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"A unique ID to identify the edition. It's useful for tagging an edition.\"\n },\n 0x45b9: {\n name: \"EditionEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: true,\n description: \"Contains all information about a segment edition.\"\n },\n 0x1043a770: {\n name: \"Chapters\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: true,\n description: \"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.\"\n },\n 0x46ae: {\n name: \"FileUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n range: \"not 0\",\n description: \"Unique ID representing the file, as random as possible.\"\n },\n 0x465c: {\n name: \"FileData\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The data of the file.\"\n },\n 0x466e: {\n name: \"FileName\",\n level: 3,\n type: \"8\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Filename of the attached file.\"\n },\n 0x467e: {\n name: \"FileDescription\",\n level: 3,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"A human-friendly name for the attached file.\"\n },\n 0x61a7: {\n name: \"AttachedFile\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"An attached file.\"\n },\n 0x1941a469: {\n name: \"Attachments\",\n level: 1,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain attached files.\"\n },\n 0xeb: {\n name: \"CueRefCodecState\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0x535f: {\n name: \"CueRefNumber\",\n level: 5,\n type: \"u\",\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"Number of the referenced Block of Track X in the specified Cluster.\"\n },\n 0xdb: {\n name: \"CueReference\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 2,\n webm: false,\n description: \"The Clusters containing the required referenced Blocks.\"\n },\n 0xea: {\n name: \"CueCodecState\",\n level: 4,\n type: \"u\",\n minver: 2,\n webm: false,\n \"default\": 0,\n description: \"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.\"\n },\n 0xb2: {\n name: \"CueDuration\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues.\"\n },\n 0xf0: {\n name: \"CueRelativePosition\",\n level: 4,\n type: \"u\",\n mandatory: false,\n minver: 4,\n webm: false,\n description: \"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.\",\n position: \"clusterRelative\"\n },\n 0xf1: {\n name: \"CueClusterPosition\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the Cluster containing the required Block.\",\n position: \"segment\",\n },\n 0xf7: {\n name: \"CueTrack\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track for which a position is given.\"\n },\n 0xb7: {\n name: \"CueTrackPositions\",\n level: 3,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contain positions for different tracks corresponding to the timestamp.\"\n },\n 0xb3: {\n name: \"CueTime\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp according to the segment time base.\"\n },\n 0xbb: {\n name: \"CuePoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains all information relative to a seek point in the segment.\"\n },\n 0x1c53bb6b: {\n name: \"Cues\",\n level: 1,\n type: \"m\",\n minver: 1,\n description: \"A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non \\\"live\\\" streams.\"\n },\n 0x47e6: {\n name: \"ContentSigHashAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": [ \"\", \"\" ],\n description: \"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5\"\n },\n 0x47e5: {\n name: \"ContentSigAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA\"\n },\n 0x47e4: {\n name: \"ContentSigKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"This is the ID of the private key the data was signed with.\"\n },\n 0x47e3: {\n name: \"ContentSignature\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"A cryptographic signature of the contents.\"\n },\n 0x47e2: {\n name: \"ContentEncKeyID\",\n level: 6,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"For public key algorithms this is the ID of the public key the the data was encrypted with.\"\n },\n 0x47e1: {\n name: \"ContentEncAlgo\",\n level: 6,\n type: \"u\",\n minver: 1,\n webm: false,\n \"default\": 0,\n // \"br\": \"\",\n description: \"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES\"\n },\n 0x6d80: {\n name: \"ContentEncodings\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Settings for several content encoding mechanisms like compression or encryption.\"\n },\n 0xc4: {\n name: \"TrickMasterTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc7: {\n name: \"TrickMasterTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc6: {\n name: \"TrickTrackFlag\",\n level: 3,\n type: \"u\",\n divx: true,\n \"default\": 0,\n description: \"DivX trick track extenstions\"\n },\n 0xc1: {\n name: \"TrickTrackSegmentUID\",\n level: 3,\n type: \"b\",\n divx: true,\n bytesize: 16,\n description: \"DivX trick track extenstions\"\n },\n 0xc0: {\n name: \"TrickTrackUID\",\n level: 3,\n type: \"u\",\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xed: {\n name: \"TrackJoinUID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of a track whose blocks are used to create this virtual track.\"\n },\n 0xe9: {\n name: \"TrackJoinBlocks\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all tracks whose Blocks need to be combined to create this virtual track\"\n },\n 0xe6: {\n name: \"TrackPlaneType\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n description: \"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background).\"\n },\n 0xe5: {\n name: \"TrackPlaneUID\",\n level: 6,\n type: \"u\",\n mandatory: true,\n minver: 3,\n webm: false,\n range: \"not 0\",\n description: \"The trackUID number of the track representing the plane.\"\n },\n 0xe4: {\n name: \"TrackPlane\",\n level: 5,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 3,\n webm: false,\n description: \"Contains a video plane track that need to be combined to create this 3D track\"\n },\n 0xe3: {\n name: \"TrackCombinePlanes\",\n level: 4,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Contains the list of all video plane tracks that need to be combined to create this 3D track\"\n },\n 0xe2: {\n name: \"TrackOperation\",\n level: 3,\n type: \"m\",\n minver: 3,\n webm: false,\n description: \"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject.\"\n },\n 0x7d7b: {\n name: \"ChannelPositions\",\n cppname: \"AudioPosition\",\n level: 4,\n type: \"b\",\n webm: false,\n description: \"Table of horizontal angles for each successive channel, see appendix.\"\n },\n 0x9f: {\n name: \"Channels\",\n cppname: \"AudioChannels\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"not 0\",\n description: \"Numbers of channels in the track.\"\n },\n 0x78b5: {\n name: \"OutputSamplingFrequency\",\n cppname: \"AudioOutputSamplingFreq\",\n level: 4,\n type: \"f\",\n minver: 1,\n \"default\": \"Sampling Frequency\",\n range: \"> 0\",\n description: \"Real output sampling frequency in Hz (used for SBR techniques).\"\n },\n 0xb5: {\n name: \"SamplingFrequency\",\n cppname: \"AudioSamplingFreq\",\n level: 4,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"default\": 8000.0,\n range: \"> 0\",\n description: \"Sampling frequency in Hz.\"\n },\n 0xe1: {\n name: \"Audio\",\n cppname: \"TrackAudio\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Audio settings.\"\n },\n 0x2383e3: {\n name: \"FrameRate\",\n cppname: \"VideoFrameRate\",\n level: 4,\n type: \"f\",\n range: \"> 0\",\n \"strong\": \"Informational\",\n description: \"Number of frames per second. only.\"\n },\n 0x2fb523: {\n name: \"GammaValue\",\n cppname: \"VideoGamma\",\n level: 4,\n type: \"f\",\n webm: false,\n range: \"> 0\",\n description: \"Gamma Value.\"\n },\n 0x2eb524: {\n name: \"ColourSpace\",\n cppname: \"VideoColourSpace\",\n level: 4,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 4,\n description: \"Same value as in AVI (32 bits).\"\n },\n 0x54b3: {\n name: \"AspectRatioType\",\n cppname: \"VideoAspectRatio\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).\"\n },\n 0x54b2: {\n name: \"DisplayUnit\",\n cppname: \"VideoDisplayUnit\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio).\"\n },\n 0x54ba: {\n name: \"DisplayHeight\",\n cppname: \"VideoDisplayHeight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelHeight\",\n range: \"not 0\",\n description: \"Height of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54b0: {\n name: \"DisplayWidth\",\n cppname: \"VideoDisplayWidth\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": \"PixelWidth\",\n range: \"not 0\",\n description: \"Width of the video frames to display. The default value is only valid when DisplayUnit is 0.\"\n },\n 0x54dd: {\n name: \"PixelCropRight\",\n cppname: \"VideoPixelCropRight\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the right of the image.\"\n },\n 0x54cc: {\n name: \"PixelCropLeft\",\n cppname: \"VideoPixelCropLeft\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove on the left of the image.\"\n },\n 0x54bb: {\n name: \"PixelCropTop\",\n cppname: \"VideoPixelCropTop\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the top of the image.\"\n },\n 0x54aa: {\n name: \"PixelCropBottom\",\n cppname: \"VideoPixelCropBottom\",\n level: 4,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n description: \"The number of video pixels to remove at the bottom of the image (for HDTV content).\"\n },\n 0xba: {\n name: \"PixelHeight\",\n cppname: \"VideoPixelHeight\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Height of the encoded video frames in pixels.\"\n },\n 0xb0: {\n name: \"PixelWidth\",\n cppname: \"VideoPixelWidth\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"Width of the encoded video frames in pixels.\"\n },\n 0x53b9: {\n name: \"OldStereoMode\",\n level: 4,\n type: \"u\",\n \"maxver\": \"0\",\n webm: false,\n divx: false,\n description: \"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes).\"\n },\n 0x53c0: {\n name: \"AlphaMode\",\n cppname: \"VideoAlphaMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data.\"\n },\n 0x53b8: {\n name: \"StereoMode\",\n cppname: \"VideoStereoMode\",\n level: 4,\n type: \"u\",\n minver: 3,\n webm: true,\n \"default\": 0,\n description: \"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes.\"\n },\n 0x9a: {\n name: \"FlagInterlaced\",\n cppname: \"VideoFlagInterlaced\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if the video is interlaced. (1 bit)\"\n },\n 0xe0: {\n name: \"Video\",\n cppname: \"TrackVideo\",\n level: 3,\n type: \"m\",\n minver: 1,\n description: \"Video settings.\"\n },\n 0x66a5: {\n name: \"TrackTranslateTrackID\",\n level: 4,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x66bf: {\n name: \"TrackTranslateCodec\",\n level: 4,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x66fc: {\n name: \"TrackTranslateEditionUID\",\n level: 4,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x56bb: {\n name: \"SeekPreRoll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid.\"\n },\n 0x56aa: {\n name: \"CodecDelay\",\n level: 3,\n type: \"u\",\n multiple: false,\n \"default\": 0,\n minver: 4,\n webm: true,\n description: \"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster.\"\n },\n 0x6fab: {\n name: \"TrackOverlay\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.\"\n },\n 0xaa: {\n name: \"CodecDecodeAll\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: false,\n \"default\": 1,\n range: \"0-1\",\n description: \"The codec can decode potentially damaged data (1 bit).\"\n },\n 0x26b240: {\n name: \"CodecDownloadURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to download about the codec used.\"\n },\n 0x3b4040: {\n name: \"CodecInfoURL\",\n level: 3,\n type: \"s\",\n multiple: true,\n webm: false,\n description: \"A URL to find information about the codec used.\"\n },\n 0x3a9697: {\n name: \"CodecSettings\",\n level: 3,\n type: \"8\",\n webm: false,\n description: \"A string describing the encoding setting used.\"\n },\n 0x63a2: {\n name: \"CodecPrivate\",\n level: 3,\n type: \"b\",\n minver: 1,\n description: \"Private data only known to the codec.\"\n },\n 0x22b59c: {\n name: \"Language\",\n cppname: \"TrackLanguage\",\n level: 3,\n type: \"s\",\n minver: 1,\n \"default\": \"eng\",\n description: \"Specifies the language of the track in the Matroska languages form.\"\n },\n 0x536e: {\n name: \"Name\",\n cppname: \"TrackName\",\n level: 3,\n type: \"8\",\n minver: 1,\n description: \"A human-readable track name.\"\n },\n 0x55ee: {\n name: \"MaxBlockAdditionID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The maximum value of BlockAdditions for this track.\"\n },\n 0x537f: {\n name: \"TrackOffset\",\n level: 3,\n type: \"i\",\n webm: false,\n \"default\": 0,\n description: \"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track.\"\n },\n 0x23314f: {\n name: \"TrackTimecodeScale\",\n level: 3,\n type: \"f\",\n mandatory: true,\n minver: 1,\n \"maxver\": \"3\",\n webm: false,\n \"default\": 1.0,\n range: \"> 0\",\n description: \"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).\"\n },\n 0x234e7a: {\n name: \"DefaultDecodedFieldDuration\",\n cppname: \"TrackDefaultDecodedFieldDuration\",\n level: 3,\n type: \"u\",\n minver: 4,\n range: \"not 0\",\n description: \"The period in nanoseconds (not scaled by TimcodeScale)\\nbetween two successive fields at the output of the decoding process (see the notes)\"\n },\n 0x23e383: {\n name: \"DefaultDuration\",\n cppname: \"TrackDefaultDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n range: \"not 0\",\n description: \"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block).\"\n },\n 0x6df8: {\n name: \"MaxCache\",\n cppname: \"TrackMaxCache\",\n level: 3,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.\"\n },\n 0x6de7: {\n name: \"MinCache\",\n cppname: \"TrackMinCache\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.\"\n },\n 0x9c: {\n name: \"FlagLacing\",\n cppname: \"TrackFlagLacing\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track may contain blocks using lacing. (1 bit)\"\n },\n 0x55aa: {\n name: \"FlagForced\",\n cppname: \"TrackFlagForced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": 0,\n range: \"0-1\",\n description: \"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)\"\n },\n 0xb9: {\n name: \"FlagEnabled\",\n cppname: \"TrackFlagEnabled\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 2,\n webm: true,\n \"default\": 1,\n range: \"0-1\",\n description: \"Set if the track is usable. (1 bit)\"\n },\n 0x73c5: {\n name: \"TrackUID\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.\"\n },\n 0xd7: {\n name: \"TrackNumber\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n range: \"not 0\",\n description: \"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).\"\n },\n 0xae: {\n name: \"TrackEntry\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Describes a track with all elements.\"\n },\n 0x1654ae6b: {\n name: \"Tracks\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"A top-level block of information with many tracks described.\"\n },\n 0xaf: {\n name: \"EncryptedBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n webm: false,\n description: \"Similar to EncryptedBlock Structure)\"\n },\n 0xca: {\n name: \"ReferenceTimeCode\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc9: {\n name: \"ReferenceOffset\",\n level: 4,\n type: \"u\",\n multiple: false,\n mandatory: true,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xc8: {\n name: \"ReferenceFrame\",\n level: 3,\n type: \"m\",\n multiple: false,\n minver: 0,\n webm: false,\n divx: true,\n description: \"DivX trick track extenstions\"\n },\n 0xcf: {\n name: \"SliceDuration\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) duration to apply to the element.\"\n },\n 0xce: {\n name: \"Delay\",\n cppname: \"SliceDelay\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The (scaled) delay to apply to the element.\"\n },\n 0xcb: {\n name: \"BlockAdditionID\",\n cppname: \"SliceBlockAddID\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The ID of the BlockAdditional element (0 is the main Block).\"\n },\n 0xcd: {\n name: \"FrameNumber\",\n cppname: \"SliceFrameNumber\",\n level: 5,\n type: \"u\",\n \"default\": 0,\n description: \"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).\"\n },\n 0xcc: {\n name: \"LaceNumber\",\n cppname: \"SliceLaceNumber\",\n level: 5,\n type: \"u\",\n minver: 1,\n \"default\": 0,\n divx: false,\n description: \"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0xe8: {\n name: \"TimeSlice\",\n level: 4,\n type: \"m\",\n multiple: true,\n minver: 1,\n divx: false,\n description: \"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.\"\n },\n 0x8e: {\n name: \"Slices\",\n level: 3,\n type: \"m\",\n minver: 1,\n divx: false,\n description: \"Contains slices description.\"\n },\n 0x75a2: {\n name: \"DiscardPadding\",\n level: 3,\n type: \"i\",\n minver: 4,\n webm: true,\n description: \"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback.\"\n },\n 0xa4: {\n name: \"CodecState\",\n level: 3,\n type: \"b\",\n minver: 2,\n webm: false,\n description: \"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.\"\n },\n 0xfd: {\n name: \"ReferenceVirtual\",\n level: 3,\n type: \"i\",\n webm: false,\n description: \"Relative position of the data that should be in position of the virtual block.\"\n },\n 0xfb: {\n name: \"ReferenceBlock\",\n level: 3,\n type: \"i\",\n multiple: true,\n minver: 1,\n description: \"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to.\"\n },\n 0xfa: {\n name: \"ReferencePriority\",\n cppname: \"FlagReferenced\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 0,\n description: \"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.\"\n },\n 0x9b: {\n name: \"BlockDuration\",\n level: 3,\n type: \"u\",\n minver: 1,\n \"default\": \"TrackDuration\",\n description: \"The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in \\\"display\\\" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.\"\n },\n 0xa5: {\n name: \"BlockAdditional\",\n level: 5,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"Interpreted by the codec as it wishes (using the BlockAddID).\"\n },\n 0xee: {\n name: \"BlockAddID\",\n level: 5,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n \"default\": 1,\n range: \"not 0\",\n description: \"An ID to identify the BlockAdditional level.\"\n },\n 0xa6: {\n name: \"BlockMore\",\n level: 4,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Contain the BlockAdditional and some parameters.\"\n },\n 0x75a1: {\n name: \"BlockAdditions\",\n level: 3,\n type: \"m\",\n minver: 1,\n webm: false,\n description: \"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.\"\n },\n 0xa2: {\n name: \"BlockVirtual\",\n level: 3,\n type: \"b\",\n webm: false,\n description: \"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)\"\n },\n 0xa1: {\n name: \"Block\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)\"\n },\n 0xa0: {\n name: \"BlockGroup\",\n level: 2,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.\"\n },\n 0xa3: {\n name: \"SimpleBlock\",\n level: 2,\n type: \"b\",\n multiple: true,\n minver: 2,\n webm: true,\n divx: true,\n description: \"Similar to SimpleBlock Structure\"\n },\n 0xab: {\n name: \"PrevSize\",\n cppname: \"ClusterPrevSize\",\n level: 2,\n type: \"u\",\n minver: 1,\n description: \"Size of the previous Cluster, in octets. Can be useful for backward playing.\",\n position: \"prevCluster\"\n },\n 0xa7: {\n name: \"Position\",\n cppname: \"ClusterPosition\",\n level: 2,\n type: \"u\",\n minver: 1,\n webm: false,\n description: \"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.\",\n position: \"segment\"\n },\n 0x58d7: {\n name: \"SilentTrackNumber\",\n cppname: \"ClusterSilentTrackNumber\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.\"\n },\n 0xe7: {\n name: \"Timecode\",\n cppname: \"ClusterTimecode\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"Absolute timestamp of the cluster (based on TimecodeScale).\"\n },\n 0x1f43b675: {\n name: \"Cluster\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"The lower level element containing the (monolithic) Block structure.\"\n },\n 0x4d80: {\n name: \"MuxingApp\",\n level: 2,\n type: \"8\",\n mandatory: true,\n minver: 1,\n description: \"Muxing application or library (\\\"libmatroska-0.4.3\\\").\"\n },\n 0x7ba9: {\n name: \"Title\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"General name of the segment.\"\n },\n 0x2ad7b2: {\n name: \"TimecodeScaleDenominator\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 4,\n \"default\": \"1000000000\",\n description: \"Timestamp scale numerator, see TimecodeScale.\"\n },\n 0x2ad7b1: {\n name: \"TimecodeScale\",\n level: 2,\n type: \"u\",\n mandatory: true,\n minver: 1,\n \"default\": \"1000000\",\n description: \"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds).\"\n },\n 0x69a5: {\n name: \"ChapterTranslateID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.\"\n },\n 0x69bf: {\n name: \"ChapterTranslateCodec\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n webm: false,\n description: \"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).\"\n },\n 0x69fc: {\n name: \"ChapterTranslateEditionUID\",\n level: 3,\n type: \"u\",\n multiple: true,\n minver: 1,\n webm: false,\n description: \"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.\"\n },\n 0x3e83bb: {\n name: \"NextFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the next segment.\"\n },\n 0x3eb923: {\n name: \"NextUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the next chained segment (128 bits).\"\n },\n 0x3c83ab: {\n name: \"PrevFilename\",\n level: 2,\n type: \"8\",\n minver: 1,\n webm: false,\n description: \"An escaped filename corresponding to the previous segment.\"\n },\n 0x3cb923: {\n name: \"PrevUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n bytesize: 16,\n description: \"A unique ID to identify the previous chained segment (128 bits).\"\n },\n 0x73a4: {\n name: \"SegmentUID\",\n level: 2,\n type: \"b\",\n minver: 1,\n webm: false,\n range: \"not 0\",\n bytesize: 16,\n description: \"A randomly generated unique ID to identify the current segment between many others (128 bits).\"\n },\n 0x1549a966: {\n name: \"Info\",\n level: 1,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains miscellaneous general information and statistics on the file.\"\n },\n 0x53ac: {\n name: \"SeekPosition\",\n level: 3,\n type: \"u\",\n mandatory: true,\n minver: 1,\n description: \"The position of the element in the segment in octets (0 = first level 1 element).\",\n position: \"segment\"\n },\n 0x53ab: {\n name: \"SeekID\",\n level: 3,\n type: \"b\",\n mandatory: true,\n minver: 1,\n description: \"The binary ID corresponding to the element name.\",\n type2: \"ebmlID\"\n },\n 0x4dbb: {\n name: \"Seek\",\n cppname: \"SeekPoint\",\n level: 2,\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Contains a single seek entry to an EBML element.\"\n },\n 0x114d9b74: {\n name: \"SeekHead\",\n cppname: \"SeekHeader\",\n level: 1,\n type: \"m\",\n multiple: true,\n minver: 1,\n description: \"Contains the position of other level 1 elements.\"\n },\n 0x7e7b: {\n name: \"SignatureElementList\",\n level: 2,\n type: \"m\",\n multiple: true,\n webm: false,\n i: \"Cluster|Block|BlockAdditional\",\n description: \"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption.\"\n },\n 0x7e5b: {\n name: \"SignatureElements\",\n level: 1,\n type: \"m\",\n webm: false,\n description: \"Contains elements that will be used to compute the signature.\"\n },\n 0x7eb5: {\n name: \"Signature\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The signature of the data (until a new.\"\n },\n 0x7ea5: {\n name: \"SignaturePublicKey\",\n level: 1,\n type: \"b\",\n webm: false,\n description: \"The public key to use with the algorithm (in the case of a PKI-based signature).\"\n },\n 0x7e9a: {\n name: \"SignatureHash\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Hash algorithm used (1=SHA1-160, 2=MD5).\"\n },\n 0x7e8a: {\n name: \"SignatureAlgo\",\n level: 1,\n type: \"u\",\n webm: false,\n description: \"Signature algorithm used (1=RSA, 2=elliptic).\"\n },\n 0x1b538667: {\n name: \"SignatureSlot\",\n level: -1,\n type: \"m\",\n multiple: true,\n webm: false,\n description: \"Contain signature of some (coming) elements in the stream.\"\n },\n 0xbf: {\n name: \"CRC-32\",\n level: -1,\n type: \"b\",\n minver: 1,\n webm: false,\n description: \"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian\",\n crc: true\n },\n 0xec: {\n name: \"Void\",\n level: -1,\n type: \"b\",\n minver: 1,\n description: \"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.\"\n },\n 0x42f3: {\n name: \"EBMLMaxSizeLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 8,\n minver: 1,\n description: \"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.\"\n },\n 0x42f2: {\n name: \"EBMLMaxIDLength\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 4,\n minver: 1,\n description: \"The maximum length of the IDs you'll find in this file (4 or less in Matroska).\"\n },\n 0x42f7: {\n name: \"EBMLReadVersion\",\n level: 1,\n type: \"u\",\n mandatory: true,\n \"default\": 1,\n minver: 1,\n description: \"The minimum EBML version a parser has to support to read this file.\"\n },\n 0x1a45dfa3: {\n name: \"EBML\",\n level: \"0\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n minver: 1,\n description: \"Set the EBML characteristics of the data to follow. Each EBML document has to start with this.\"\n },\n 0x55b0: {\n name: \"Colour\",\n level: \"4\",\n type: \"m\",\n mandatory: true,\n multiple: true,\n description: \"Settings describing the colour format.\"\n },\n 0x55b1: {\n name: \"MatrixCoefficients\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC 23001-8:2016 or ITU-T H.273.\"\n },\n 0x55b9: {\n name: \"Range\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"Clipping of the color ranges.\"\n },\n 0x55ba: {\n name: \"TransferCharacteristics\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The transfer characteristics of the video.\"\n },\n 0x55bb: {\n name: \"Primaries\",\n level: \"5\",\n type: \"u\",\n mandatory: true,\n multiple: true,\n description: \"The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from Table 2 of ISO/IEC 23091-4 or ITU-T H.273.\"\n },\n};\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar events_1 = require(\"events\");\nvar tools = require(\"./tools\");\n/**\n * This is an informal code for reference.\n * EBMLReader is a class for getting information to enable seeking Webm recorded by MediaRecorder.\n * So please do not use for regular WebM files.\n */\nvar EBMLReader = /** @class */ (function (_super) {\n __extends(EBMLReader, _super);\n function EBMLReader() {\n var _this = _super.call(this) || this;\n _this.logGroup = \"\";\n _this.hasLoggingStarted = false;\n _this.metadataloaded = false;\n _this.chunks = [];\n _this.stack = [];\n _this.segmentOffset = 0;\n _this.last2SimpleBlockVideoTrackTimecode = [0, 0];\n _this.last2SimpleBlockAudioTrackTimecode = [0, 0];\n _this.lastClusterTimecode = 0;\n _this.lastClusterPosition = 0;\n _this.timecodeScale = 1000000; // webm default TimecodeScale is 1ms\n _this.metadataSize = 0;\n _this.metadatas = [];\n _this.cues = [];\n _this.firstVideoBlockRead = false;\n _this.firstAudioBlockRead = false;\n _this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n _this.trackTypes = [];\n _this.trackDefaultDuration = [];\n _this.trackCodecDelay = [];\n _this.trackInfo = { type: \"nothing\" };\n _this.ended = false;\n _this.logging = false;\n _this.use_duration_every_simpleblock = false;\n _this.use_webp = false;\n _this.use_segment_info = true;\n _this.drop_default_duration = true;\n return _this;\n }\n /**\n * emit final state.\n */\n EBMLReader.prototype.stop = function () {\n this.ended = true;\n this.emit_segment_info();\n // clean up any unclosed Master Elements at the end of the stream.\n while (this.stack.length) {\n this.stack.pop();\n if (this.logging) {\n console.groupEnd();\n }\n }\n // close main group if set, logging is enabled, and has actually logged anything.\n if (this.logging && this.hasLoggingStarted && this.logGroup) {\n console.groupEnd();\n }\n };\n /**\n * emit chunk info\n */\n EBMLReader.prototype.emit_segment_info = function () {\n var data = this.chunks;\n this.chunks = [];\n if (!this.metadataloaded) {\n this.metadataloaded = true;\n this.metadatas = data;\n var videoTrackNum = this.trackTypes.indexOf(1); // find first video track\n var audioTrackNum = this.trackTypes.indexOf(2); // find first audio track\n this.trackInfo = videoTrackNum >= 0 && audioTrackNum >= 0 ? { type: \"both\", trackNumber: videoTrackNum }\n : videoTrackNum >= 0 ? { type: \"video\", trackNumber: videoTrackNum }\n : audioTrackNum >= 0 ? { type: \"audio\", trackNumber: audioTrackNum }\n : { type: \"nothing\" };\n if (!this.use_segment_info) {\n return;\n }\n this.emit(\"metadata\", { data: data, metadataSize: this.metadataSize });\n }\n else {\n if (!this.use_segment_info) {\n return;\n }\n var timecode = this.lastClusterTimecode;\n var duration = this.duration;\n var timecodeScale = this.timecodeScale;\n this.emit(\"cluster\", { timecode: timecode, data: data });\n this.emit(\"duration\", { timecodeScale: timecodeScale, duration: duration });\n }\n };\n EBMLReader.prototype.read = function (elm) {\n var _this = this;\n var drop = false;\n if (this.ended) {\n // reader is finished\n return;\n }\n if (elm.type === \"m\") {\n // 閉じタグの自動挿入\n if (elm.isEnd) {\n this.stack.pop();\n }\n else {\n var parent_1 = this.stack[this.stack.length - 1];\n if (parent_1 != null && parent_1.level >= elm.level) {\n // 閉じタグなしでレベルが下がったら閉じタグを挿入\n this.stack.pop();\n // From http://w3c.github.io/media-source/webm-byte-stream-format.html#webm-media-segments\n // This fixes logging for webm streams with Cluster of unknown length and no Cluster closing elements.\n if (this.logging) {\n console.groupEnd();\n }\n parent_1.dataEnd = elm.dataEnd;\n parent_1.dataSize = elm.dataEnd - parent_1.dataStart;\n parent_1.unknownSize = false;\n var o = Object.assign({}, parent_1, { name: parent_1.name, type: parent_1.type, isEnd: true });\n this.chunks.push(o);\n }\n this.stack.push(elm);\n }\n }\n if (elm.type === \"m\" && elm.name == \"Segment\") {\n if (this.segmentOffset != 0) {\n console.warn(\"Multiple segments detected!\");\n }\n this.segmentOffset = elm.dataStart;\n this.emit(\"segment_offset\", this.segmentOffset);\n }\n else if (elm.type === \"b\" && elm.name === \"SimpleBlock\") {\n var _a = tools.ebmlBlock(elm.data), timecode = _a.timecode, trackNumber = _a.trackNumber, frames_1 = _a.frames;\n if (this.trackTypes[trackNumber] === 1) { // trackType === 1 => video track\n if (!this.firstVideoBlockRead) {\n this.firstVideoBlockRead = true;\n if (this.trackInfo.type === \"both\" || this.trackInfo.type === \"video\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockVideoTrackTimecode = [this.last2SimpleBlockVideoTrackTimecode[1], timecode];\n }\n else if (this.trackTypes[trackNumber] === 2) { // trackType === 2 => audio track\n if (!this.firstAudioBlockRead) {\n this.firstAudioBlockRead = true;\n if (this.trackInfo.type === \"audio\") {\n var CueTime = this.lastClusterTimecode + timecode;\n this.cues.push({ CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n this.emit(\"cue_info\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: this.lastClusterTimecode });\n this.emit(\"cue\", { CueTrack: trackNumber, CueClusterPosition: this.lastClusterPosition, CueTime: CueTime });\n }\n }\n this.last2SimpleBlockAudioTrackTimecode = [this.last2SimpleBlockAudioTrackTimecode[1], timecode];\n }\n if (this.use_duration_every_simpleblock) {\n this.emit(\"duration\", { timecodeScale: this.timecodeScale, duration: this.duration });\n }\n if (this.use_webp) {\n frames_1.forEach(function (frame) {\n var startcode = frame.slice(3, 6).toString(\"hex\");\n if (startcode !== \"9d012a\") {\n return;\n }\n ; // VP8 の場合\n var webpBuf = tools.VP8BitStreamToRiffWebPBuffer(frame);\n var webp = new Blob([webpBuf], { type: \"image/webp\" });\n var currentTime = _this.duration;\n _this.emit(\"webp\", { currentTime: currentTime, webp: webp });\n });\n }\n }\n else if (elm.type === \"m\" && elm.name === \"Cluster\" && elm.isEnd === false) {\n this.firstVideoBlockRead = false;\n this.firstAudioBlockRead = false;\n this.emit_segment_info();\n this.emit(\"cluster_ptr\", elm.tagStart);\n this.lastClusterPosition = elm.tagStart;\n }\n else if (elm.type === \"u\" && elm.name === \"Timecode\") {\n this.lastClusterTimecode = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TimecodeScale\") {\n this.timecodeScale = elm.value;\n }\n else if (elm.type === \"m\" && elm.name === \"TrackEntry\") {\n if (elm.isEnd) {\n this.trackTypes[this.currentTrack.TrackNumber] = this.currentTrack.TrackType;\n this.trackDefaultDuration[this.currentTrack.TrackNumber] = this.currentTrack.DefaultDuration;\n this.trackCodecDelay[this.currentTrack.TrackNumber] = this.currentTrack.CodecDelay;\n }\n else {\n this.currentTrack = { TrackNumber: -1, TrackType: -1, DefaultDuration: null, CodecDelay: null };\n }\n }\n else if (elm.type === \"u\" && elm.name === \"TrackType\") {\n this.currentTrack.TrackType = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"TrackNumber\") {\n this.currentTrack.TrackNumber = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"CodecDelay\") {\n this.currentTrack.CodecDelay = elm.value;\n }\n else if (elm.type === \"u\" && elm.name === \"DefaultDuration\") {\n // media source api は DefaultDuration を計算するとバグる。\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // chrome 58 ではこれを回避するために DefaultDuration 要素を抜き取った。\n // chrome 58 以前でもこのタグを抜き取ることで回避できる\n if (this.drop_default_duration) {\n console.warn(\"DefaultDuration detected!, remove it\");\n drop = true;\n }\n else {\n this.currentTrack.DefaultDuration = elm.value;\n }\n }\n else if (elm.name === \"unknown\") {\n console.warn(elm);\n }\n if (!this.metadataloaded && elm.dataEnd > 0) {\n this.metadataSize = elm.dataEnd;\n }\n if (!drop) {\n this.chunks.push(elm);\n }\n if (this.logging) {\n this.put(elm);\n }\n };\n Object.defineProperty(EBMLReader.prototype, \"duration\", {\n /**\n * DefaultDuration が定義されている場合は最後のフレームのdurationも考慮する\n * 単位 timecodeScale\n *\n * !!! if you need duration with seconds !!!\n * ```js\n * const nanosec = reader.duration * reader.timecodeScale;\n * const sec = nanosec / 1000 / 1000 / 1000;\n * ```\n */\n get: function () {\n if (this.trackInfo.type === \"nothing\") {\n console.warn(\"no video, no audio track\");\n return 0;\n }\n // defaultDuration は 生の nano sec\n var defaultDuration = 0;\n // nanoseconds\n var codecDelay = 0;\n var lastTimecode = 0;\n var _defaultDuration = this.trackDefaultDuration[this.trackInfo.trackNumber];\n if (typeof _defaultDuration === \"number\") {\n defaultDuration = _defaultDuration;\n }\n else {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=606000#c22\n // default duration がないときに使う delta\n if (this.trackInfo.type === \"both\") {\n if (this.last2SimpleBlockAudioTrackTimecode[1] > this.last2SimpleBlockVideoTrackTimecode[1]) {\n // audio diff\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n // audio delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(2)]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // audio timecode\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n }\n else {\n // video diff\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n // video delay\n var delay = this.trackCodecDelay[this.trackTypes.indexOf(1)]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n // video timecode\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n }\n else if (this.trackInfo.type === \"video\") {\n defaultDuration = (this.last2SimpleBlockVideoTrackTimecode[1] - this.last2SimpleBlockVideoTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 2 => audio\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockVideoTrackTimecode[1];\n }\n else if (this.trackInfo.type === \"audio\") {\n defaultDuration = (this.last2SimpleBlockAudioTrackTimecode[1] - this.last2SimpleBlockAudioTrackTimecode[0]) * this.timecodeScale;\n var delay = this.trackCodecDelay[this.trackInfo.trackNumber]; // 1 => video\n if (typeof delay === \"number\") {\n codecDelay = delay;\n }\n lastTimecode = this.last2SimpleBlockAudioTrackTimecode[1];\n } // else { not reached }\n }\n // convert to timecodescale\n var duration_nanosec = ((this.lastClusterTimecode + lastTimecode) * this.timecodeScale) + defaultDuration - codecDelay;\n var duration = duration_nanosec / this.timecodeScale;\n return Math.floor(duration);\n },\n enumerable: false,\n configurable: true\n });\n EBMLReader.prototype.addListener = function (event, listener) {\n return _super.prototype.addListener.call(this, event, listener);\n };\n EBMLReader.prototype.put = function (elm) {\n if (!this.hasLoggingStarted) {\n this.hasLoggingStarted = true;\n if (this.logging && this.logGroup) {\n console.groupCollapsed(this.logGroup);\n }\n }\n if (elm.type === \"m\") {\n if (elm.isEnd) {\n console.groupEnd();\n }\n else {\n console.group(elm.name + \":\" + elm.tagStart);\n }\n }\n else if (elm.type === \"b\") {\n // for debug\n //if(elm.name === \"SimpleBlock\"){\n //const o = EBML.tools.ebmlBlock(elm.value);\n //console.log(elm.name, elm.type, o.trackNumber, o.timecode);\n //}else{\n console.log(elm.name, elm.type);\n //}\n }\n else {\n console.log(elm.name, elm.tagStart, elm.type, elm.value);\n }\n };\n return EBMLReader;\n}(events_1.EventEmitter));\nexports.default = EBMLReader;\n;\n;\n;\n;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertEBMLDateToJSDate = exports.createFloatBuffer = exports.createIntBuffer = exports.createUIntBuffer = exports.encodeValueToBuffer = exports.concat = exports.putRefinedMetaData = exports.extractElement = exports.removeElement = exports.makeMetadataSeekable = exports.createRIFFChunk = exports.VP8BitStreamToRiffWebPBuffer = exports.WebPBlockFilter = exports.encodeTag = exports.readBlock = exports.ebmlBlock = exports.writeVint = exports.readVint = exports.Buffer = void 0;\n/// \nvar int64_buffer_1 = require(\"int64-buffer\");\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nvar _Buffer = require(\"buffer\");\nvar tools_ebml_1 = require(\"./tools-ebml\");\nvar _block = require(\"ebml-block\");\nexports.Buffer = _Buffer.Buffer;\nexports.readVint = tools_ebml_1.default.readVint;\nexports.writeVint = tools_ebml_1.default.writeVint;\nexports.ebmlBlock = _block;\nfunction readBlock(buf) {\n return (0, exports.ebmlBlock)(new exports.Buffer(buf));\n}\nexports.readBlock = readBlock;\n/**\n * @param end - if end === false then length is unknown\n */\nfunction encodeTag(tagId, tagData, unknownSize) {\n if (unknownSize === void 0) { unknownSize = false; }\n return concat([\n tagId,\n unknownSize ?\n new exports.Buffer('01ffffffffffffff', 'hex') :\n (0, exports.writeVint)(tagData.length),\n tagData\n ]);\n}\nexports.encodeTag = encodeTag;\n/**\n * WebP ファイルにできる SimpleBlock の パスフィルタ\n */\nfunction WebPBlockFilter(elms) {\n return elms.reduce(function (lst, elm) {\n if (elm.type !== \"b\") {\n return lst;\n }\n if (elm.name !== \"SimpleBlock\") {\n return lst;\n }\n var o = (0, exports.ebmlBlock)(elm.data);\n var hasWebP = o.frames.some(function (frame) {\n // https://tools.ietf.org/html/rfc6386#section-19.1\n var startcode = frame.slice(3, 6).toString(\"hex\");\n return startcode === \"9d012a\";\n });\n if (!hasWebP) {\n return lst;\n }\n return lst.concat(elm);\n }, []);\n}\nexports.WebPBlockFilter = WebPBlockFilter;\n/**\n * @param frame - VP8 BitStream のうち startcode をもつ frame\n * @return - WebP ファイルの ArrayBuffer\n */\nfunction VP8BitStreamToRiffWebPBuffer(frame) {\n var VP8Chunk = createRIFFChunk(\"VP8 \", frame);\n var WebPChunk = concat([\n new exports.Buffer(\"WEBP\", \"ascii\"),\n VP8Chunk\n ]);\n return createRIFFChunk(\"RIFF\", WebPChunk);\n}\nexports.VP8BitStreamToRiffWebPBuffer = VP8BitStreamToRiffWebPBuffer;\n/**\n * RIFF データチャンクを作る\n */\nfunction createRIFFChunk(FourCC, chunk) {\n var chunkSize = new exports.Buffer(4);\n chunkSize.writeUInt32LE(chunk.byteLength, 0);\n return concat([\n new exports.Buffer(FourCC.substr(0, 4), \"ascii\"),\n chunkSize,\n chunk,\n new exports.Buffer(chunk.byteLength % 2 === 0 ? 0 : 1) // padding\n ]);\n}\nexports.createRIFFChunk = createRIFFChunk;\n/* Original Metadata\n\n m 0\tEBML\n u 1\t EBMLVersion 1\n u 1\t EBMLReadVersion 1\n u 1\t EBMLMaxIDLength 4\n u 1\t EBMLMaxSizeLength 8\n s 1\t DocType webm\n u 1\t DocTypeVersion 4\n u 1\t DocTypeReadVersion 2\n m 0\tSegment\n m 1\t Info segmentContentStartPos, all CueClusterPositions provided in info.cues will be relative to here and will need adjusted\n u 2\t TimecodeScale 1000000\n 8 2\t MuxingApp Chrome\n 8 2\t WritingApp Chrome\n m 1\t Tracks tracksStartPos\n m 2\t TrackEntry\n u 3\t TrackNumber 1\n u 3\t TrackUID 31790271978391090\n u 3\t TrackType 2\n s 3\t CodecID A_OPUS\n b 3\t CodecPrivate \n m 3\t Audio\n f 4\t SamplingFrequency 48000\n u 4\t Channels 1\n m 2\t TrackEntry\n u 3\t TrackNumber 2\n u 3\t TrackUID 24051277436254136\n u 3\t TrackType 1\n s 3\t CodecID V_VP8\n m 3\t Video\n u 4\t PixelWidth 1024\n u 4\t PixelHeight 576\n m 1\t Cluster clusterStartPos\n u 2\t Timecode 0\n b 2\t SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/* Desired Metadata\n\n m\t0 EBML\n u\t1 EBMLVersion 1\n u\t1 EBMLReadVersion 1\n u\t1 EBMLMaxIDLength 4\n u\t1 EBMLMaxSizeLength 8\n s\t1 DocType webm\n u\t1 DocTypeVersion 4\n u\t1 DocTypeReadVersion 2\n m\t0 Segment\n m\t1 SeekHead -> This is SeekPosition 0, so all SeekPositions can be calculated as (bytePos - segmentContentStartPos), which is 44 in this case\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x15, 0x49, 0xA9, 0x66]) Info\n u\t3 SeekPosition -> infoStartPos =\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x16, 0x54, 0xAE, 0x6B]) Tracks\n u\t3 SeekPosition { tracksStartPos }\n m\t2 Seek\n b\t3 SeekID -> Buffer([0x1C, 0x53, 0xBB, 0x6B]) Cues\n u\t3 SeekPosition { cuesStartPos }\n m\t1 Info\n f\t2 Duration 32480 -> overwrite, or insert if it doesn't exist\n u\t2 TimecodeScale 1000000\n 8\t2 MuxingApp Chrome\n 8\t2 WritingApp Chrome\n m\t1 Tracks\n m\t2 TrackEntry\n u\t3 TrackNumber 1\n u\t3 TrackUID 31790271978391090\n u\t3 TrackType 2\n s\t3 CodecID A_OPUS\n b\t3 CodecPrivate \n m\t3 Audio\n f\t4 SamplingFrequency 48000\n u\t4 Channels 1\n m\t2 TrackEntry\n u\t3 TrackNumber 2\n u\t3 TrackUID 24051277436254136\n u\t3 TrackType 1\n s\t3 CodecID V_VP8\n m\t3 Video\n u\t4 PixelWidth 1024\n u\t4 PixelHeight 576\n m 1 Cues -> cuesStartPos\n m 2 CuePoint\n u 3 CueTime 0\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 2 CuePoint\n u 3 CueTime 600\n m 3 CueTrackPositions\n u 4 CueTrack 1\n u 4 CueClusterPosition 3911\n m 1 Cluster\n u 2 Timecode 0\n b 2 SimpleBlock track:2 timecode:0\tkeyframe:true\tinvisible:false\tdiscardable:false\tlacing:1\n*/\n/**\n * convert the metadata from a streaming webm bytestream to a seekable file by inserting Duration, Seekhead and Cues\n * @param originalMetadata - orginal metadata (everything before the clusters start) from media recorder\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n */\nfunction makeMetadataSeekable(originalMetadata, duration, cuesInfo) {\n // extract the header, we can reuse this as-is\n var header = extractElement(\"EBML\", originalMetadata);\n var headerSize = encodedSizeOfEbml(header);\n //console.error(\"Header size: \" + headerSize);\n //printElementIds(header);\n // After the header comes the Segment open tag, which in this implementation is always 12 bytes (4 byte id, 8 byte 'unknown length')\n // After that the segment content starts. All SeekPositions and CueClusterPosition must be relative to segmentContentStartPos\n var segmentContentStartPos = headerSize + 12;\n //console.error(\"segmentContentStartPos: \" + segmentContentStartPos); \n // find the original metadata size, and adjust it for header size and Segment start element so we can keep all positions relative to segmentContentStartPos\n var originalMetadataSize = originalMetadata[originalMetadata.length - 1].dataEnd - segmentContentStartPos;\n //console.error(\"Original Metadata size: \" + originalMetadataSize);\n //printElementIds(originalMetadata);\n // extract the segment info, remove the potentially existing Duration element, and add our own one.\n var info = extractElement(\"Info\", originalMetadata);\n removeElement(\"Duration\", info);\n info.splice(1, 0, { name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) });\n var infoSize = encodedSizeOfEbml(info);\n //console.error(\"Info size: \" + infoSize);\n //printElementIds(info); \n // extract the track info, we can re-use this as is\n var tracks = extractElement(\"Tracks\", originalMetadata);\n var tracksSize = encodedSizeOfEbml(tracks);\n //console.error(\"Tracks size: \" + tracksSize);\n //printElementIds(tracks); \n var seekHeadSize = 47; // Initial best guess, but could be slightly larger if the Cues element is huge.\n var seekHead = [];\n var cuesSize = 5 + cuesInfo.length * 15; // very rough initial approximation, depends a lot on file size and number of CuePoints \n var cues = [];\n var lastSizeDifference = -1; // \n // The size of SeekHead and Cues elements depends on how many bytes the offsets values can be encoded in.\n // The actual offsets in CueClusterPosition depend on the final size of the SeekHead and Cues elements\n // We need to iteratively converge to a stable solution.\n var maxIterations = 10;\n var _loop_1 = function (i) {\n // SeekHead starts at 0\n var infoStart = seekHeadSize; // Info comes directly after SeekHead\n var tracksStart = infoStart + infoSize; // Tracks comes directly after Info\n var cuesStart = tracksStart + tracksSize; // Cues starts directly after \n var newMetadataSize = cuesStart + cuesSize; // total size of metadata \n // This is the offset all CueClusterPositions should be adjusted by due to the metadata size changing.\n var sizeDifference = newMetadataSize - originalMetadataSize;\n // console.error(`infoStart: ${infoStart}, infoSize: ${infoSize}`);\n // console.error(`tracksStart: ${tracksStart}, tracksSize: ${tracksSize}`);\n // console.error(`cuesStart: ${cuesStart}, cuesSize: ${cuesSize}`);\n // console.error(`originalMetadataSize: ${originalMetadataSize}, newMetadataSize: ${newMetadataSize}, sizeDifference: ${sizeDifference}`); \n // create the SeekHead element\n seekHead = [];\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) }); // Info\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(infoStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) }); // Tracks\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tracksStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: false });\n seekHead.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) }); // Cues\n seekHead.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(cuesStart) });\n seekHead.push({ name: \"Seek\", type: \"m\", isEnd: true });\n seekHead.push({ name: \"SeekHead\", type: \"m\", isEnd: true });\n seekHeadSize = encodedSizeOfEbml(seekHead);\n //console.error(\"SeekHead size: \" + seekHeadSize);\n //printElementIds(seekHead); \n // create the Cues element\n cues = [];\n cues.push({ name: \"Cues\", type: \"m\", isEnd: false });\n cuesInfo.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) });\n //console.error(`CueClusterPosition: ${CueClusterPosition}, Corrected to: ${CueClusterPosition - segmentContentStartPos} , offset by ${sizeDifference} to become ${(CueClusterPosition - segmentContentStartPos) + sizeDifference - segmentContentStartPos}`);\n // EBMLReader returns CueClusterPosition with absolute byte offsets. The Cues section expects them as offsets from the first level 1 element of the Segment, so we need to adjust it.\n CueClusterPosition -= segmentContentStartPos;\n // We also need to adjust to take into account the change in metadata size from when EBMLReader read the original metadata.\n CueClusterPosition += sizeDifference;\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n cues.push({ name: \"Cues\", type: \"m\", isEnd: true });\n cuesSize = encodedSizeOfEbml(cues);\n //console.error(\"Cues size: \" + cuesSize); \n //console.error(\"Cue count: \" + cuesInfo.length);\n //printElementIds(cues); \n // If the new MetadataSize is not the same as the previous iteration, we need to run once more.\n if (lastSizeDifference !== sizeDifference) {\n lastSizeDifference = sizeDifference;\n if (i === maxIterations - 1) {\n throw new Error(\"Failed to converge to a stable metadata size\");\n }\n }\n else {\n return \"break\";\n }\n };\n for (var i = 0; i < maxIterations; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n var finalMetadata = [].concat.apply([], [\n header,\n { name: \"Segment\", type: \"m\", isEnd: false, unknownSize: true },\n seekHead,\n info,\n tracks,\n cues\n ]);\n var result = new EBMLEncoder_1.default().encode(finalMetadata);\n //printElementIds(finalMetadata);\n //console.error(`Final metadata buffer size: ${result.byteLength}`);\n //console.error(`Final metadata buffer size without header and segment: ${result.byteLength-segmentContentStartPos}`);\n return result;\n}\nexports.makeMetadataSeekable = makeMetadataSeekable;\n/**\n * print all element id names in a list\n\n * @param metadata - array of EBML elements to print\n *\nexport function printElementIds(metadata: EBML.EBMLElementBuffer[]) {\n\n let result: EBML.EBMLElementBuffer[] = [];\n let start: number = -1;\n\n for (let i = 0; i < metadata.length; i++) {\n console.error(\"\\t id: \" + metadata[i].name);\n }\n}\n*/\n/**\n * remove all occurances of an EBML element from an array of elements\n * If it's a MasterElement you will also remove the content. (everything between start and end)\n * @param idName - name of the EBML Element to remove.\n * @param metadata - array of EBML elements to search\n */\nfunction removeElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n metadata.splice(start, i - start + 1);\n return;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n metadata.splice(i, 1);\n return;\n }\n }\n }\n}\nexports.removeElement = removeElement;\n/**\n * extract the first occurance of an EBML tag from a flattened array of EBML data.\n * If it's a MasterElement you will also get the content. (everything between start and end)\n * @param idName - name of the EBML Element to extract.\n * @param metadata - array of EBML elements to search\n */\nfunction extractElement(idName, metadata) {\n var result = [];\n var start = -1;\n for (var i = 0; i < metadata.length; i++) {\n var element = metadata[i];\n if (element.name === idName) {\n // if it's a Master element, extract the start and end element, and everything in between\n if (element.type === \"m\") {\n if (!element.isEnd) {\n start = i;\n }\n else {\n // we've reached the end, extract the whole thing\n if (start == -1)\n throw new Error(\"Detected \".concat(idName, \" closing element before finding the start\"));\n result = metadata.slice(start, i + 1);\n break;\n }\n }\n else {\n // not a Master element, so we've found what we're looking for.\n result.push(metadata[i]);\n break;\n }\n }\n }\n return result;\n}\nexports.extractElement = extractElement;\n/**\n * @deprecated\n * metadata に対して duration と seekhead を追加した metadata を返す\n * @param metadata - 変更前の webm における ファイル先頭から 最初の Cluster 要素までの 要素\n * @param duration - Duration (TimecodeScale)\n * @param cues - cue points for clusters\n * @deprecated @param clusterPtrs - 変更前の webm における SeekHead に追加する Cluster 要素 への start pointer\n * @deprecated @param cueInfos - please use cues.\n */\nfunction putRefinedMetaData(metadata, info) {\n if (Array.isArray(info.cueInfos) && !Array.isArray(info.cues)) {\n console.warn(\"putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues\");\n info.cues = info.cueInfos;\n }\n var ebml = [];\n var payload = [];\n for (var i_1 = 0; i_1 < metadata.length; i_1++) {\n var elm = metadata[i_1];\n if (elm.type === \"m\" && elm.name === \"Segment\") {\n ebml = metadata.slice(0, i_1);\n payload = metadata.slice(i_1);\n if (elm.unknownSize) {\n payload.shift(); // remove segment tag\n break;\n }\n throw new Error(\"this metadata is not streaming webm file\");\n }\n }\n // *0 *4 *5 *36 *40 *48=segmentOffset *185=originalPayloadOffsetEnd\n // | | | | | | |\n // [EBML][size]....[Segment][size][Info][size][Duration][size]...[Cluster]\n // | | |^inf | |\n // | +segmentSiz(12)+ |\n // +-ebmlSize(36)--+ | +-payloadSize(137)-------------+offsetEndDiff+\n // | | +-newPayloadSize(??)-------------------------+\n // | | | |\n // [Segment][size][Info][size][Duration][size]....[size][value][Cluster]\n // ^ |\n // | *??=newPayloadOffsetEnd\n // inf\n if (!(payload[payload.length - 1].dataEnd > 0)) {\n throw new Error(\"metadata dataEnd has wrong number\");\n }\n var originalPayloadOffsetEnd = payload[payload.length - 1].dataEnd; // = first cluster ptr\n var ebmlSize = ebml[ebml.length - 1].dataEnd; // = first segment ptr\n var refinedEBMLSize = new EBMLEncoder_1.default().encode(ebml).byteLength;\n var offsetDiff = refinedEBMLSize - ebmlSize;\n var payloadSize = originalPayloadOffsetEnd - payload[0].tagStart;\n var segmentSize = payload[0].tagStart - ebmlSize;\n var segmentOffset = payload[0].tagStart;\n var segmentTagBuf = new exports.Buffer([0x18, 0x53, 0x80, 0x67]); // Segment\n var segmentSizeBuf = new exports.Buffer('01ffffffffffffff', 'hex'); // Segmentの最後の位置は無数の Cluster 依存なので。 writeVint(newPayloadSize).byteLength ではなく、 infinity.\n var _segmentSize = segmentTagBuf.byteLength + segmentSizeBuf.byteLength; // == segmentSize\n var newPayloadSize = payloadSize;\n // We need the size to be stable between two refinements in order for our offsets to be correct\n // Bound the number of possible refinements so we can't go infinate if something goes wrong\n var i;\n for (i = 1; i < 20; i++) {\n var newPayloadOffsetEnd = ebmlSize + _segmentSize + newPayloadSize;\n var offsetEndDiff = newPayloadOffsetEnd - originalPayloadOffsetEnd;\n var sizeDiff = offsetDiff + offsetEndDiff;\n var refined = refineMetadata(payload, sizeDiff, info);\n var newNewRefinedSize = new EBMLEncoder_1.default().encode(refined).byteLength; // 一旦 seekhead を作って自身のサイズを調べる\n if (newNewRefinedSize === newPayloadSize) {\n // Size is stable\n return new EBMLEncoder_1.default().encode([].concat(ebml, [{ type: \"m\", name: \"Segment\", isEnd: false, unknownSize: true }], refined));\n }\n newPayloadSize = newNewRefinedSize;\n }\n throw new Error(\"unable to refine metadata, stable size could not be found in \" + i + \" iterations!\");\n}\nexports.putRefinedMetaData = putRefinedMetaData;\n// Given a list of EBMLElementBuffers, returns their encoded size in bytes\nfunction encodedSizeOfEbml(refinedMetaData) {\n var encorder = new EBMLEncoder_1.default();\n return refinedMetaData.reduce(function (lst, elm) { return lst.concat(encorder.encode([elm])); }, []).reduce(function (o, buf) { return o + buf.byteLength; }, 0);\n}\nfunction refineMetadata(mesetadata, sizeDiff, info) {\n var duration = info.duration, clusterPtrs = info.clusterPtrs, cues = info.cues;\n var _metadata = mesetadata.slice(0);\n if (typeof duration === \"number\") {\n // duration を追加する\n var overwrited_1 = false;\n _metadata.forEach(function (elm) {\n if (elm.type === \"f\" && elm.name === \"Duration\") {\n overwrited_1 = true;\n elm.data = createFloatBuffer(duration, 8);\n }\n });\n if (!overwrited_1) {\n insertTag(_metadata, \"Info\", [{ name: \"Duration\", type: \"f\", data: createFloatBuffer(duration, 8) }]);\n }\n }\n if (Array.isArray(cues)) {\n insertTag(_metadata, \"Cues\", create_cue(cues, sizeDiff));\n }\n var seekhead_children = [];\n if (Array.isArray(clusterPtrs)) {\n console.warn(\"append cluster pointers to seekhead is deprecated. please use cues\");\n seekhead_children = create_seek_from_clusters(clusterPtrs, sizeDiff);\n }\n // remove seek info\n /*\n _metadata = _metadata.filter((elm)=> !(\n elm.name === \"Seek\" ||\n elm.name === \"SeekID\" ||\n elm.name === \"SeekPosition\") );\n */\n // working on progress\n //seekhead_children = seekhead_children.concat(create_seekhead(_metadata));\n insertTag(_metadata, \"SeekHead\", seekhead_children, true);\n return _metadata;\n}\nfunction create_seekhead(metadata, sizeDiff) {\n var seeks = [];\n [\"Info\", \"Tracks\", \"Cues\"].forEach(function (tagName) {\n var tagStarts = metadata.filter(function (elm) { return elm.type === \"m\" && elm.name === tagName && elm.isEnd === false; }).map(function (elm) { return elm[\"tagStart\"]; });\n var tagStart = tagStarts[0];\n if (typeof tagStart !== \"number\") {\n return;\n }\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n switch (tagName) {\n case \"Info\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x15, 0x49, 0xA9, 0x66]) });\n break;\n case \"Tracks\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x16, 0x54, 0xAE, 0x6B]) });\n break;\n case \"Cues\":\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1C, 0x53, 0xBB, 0x6B]) });\n break;\n }\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(tagStart + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_seek_from_clusters(clusterPtrs, sizeDiff) {\n var seeks = [];\n clusterPtrs.forEach(function (start) {\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: false });\n // [0x1F, 0x43, 0xB6, 0x75] で Cluster 意\n seeks.push({ name: \"SeekID\", type: \"b\", data: new exports.Buffer([0x1F, 0x43, 0xB6, 0x75]) });\n seeks.push({ name: \"SeekPosition\", type: \"u\", data: createUIntBuffer(start + sizeDiff) });\n seeks.push({ name: \"Seek\", type: \"m\", isEnd: true });\n });\n return seeks;\n}\nfunction create_cue(cueInfos, sizeDiff) {\n var cues = [];\n cueInfos.forEach(function (_a) {\n var CueTrack = _a.CueTrack, CueClusterPosition = _a.CueClusterPosition, CueTime = _a.CueTime;\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTime\", type: \"u\", data: createUIntBuffer(CueTime) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: false });\n cues.push({ name: \"CueTrack\", type: \"u\", data: createUIntBuffer(CueTrack) }); // video track\n cues.push({ name: \"CueClusterPosition\", type: \"u\", data: createUIntBuffer(CueClusterPosition + sizeDiff) });\n cues.push({ name: \"CueTrackPositions\", type: \"m\", isEnd: true });\n cues.push({ name: \"CuePoint\", type: \"m\", isEnd: true });\n });\n return cues;\n}\nfunction insertTag(_metadata, tagName, children, insertHead) {\n if (insertHead === void 0) { insertHead = false; }\n // find the tagname from _metadata\n var idx = -1;\n for (var i = 0; i < _metadata.length; i++) {\n var elm = _metadata[i];\n if (elm.type === \"m\" && elm.name === tagName && elm.isEnd === false) {\n idx = i;\n break;\n }\n }\n if (idx >= 0) {\n // insert [] to \n Array.prototype.splice.apply(_metadata, [idx + 1, 0].concat(children));\n }\n else if (insertHead) {\n [].concat([{ name: tagName, type: \"m\", isEnd: false }], children, [{ name: tagName, type: \"m\", isEnd: true }]).reverse().forEach(function (elm) { _metadata.unshift(elm); });\n }\n else {\n // metadata 末尾に を追加\n // insert \n _metadata.push({ name: tagName, type: \"m\", isEnd: false });\n children.forEach(function (elm) { _metadata.push(elm); });\n _metadata.push({ name: tagName, type: \"m\", isEnd: true });\n }\n}\nfunction concat(list) {\n return exports.Buffer.concat(list);\n}\nexports.concat = concat;\nfunction encodeValueToBuffer(elm) {\n var data = new exports.Buffer(0);\n if (elm.type === \"m\") {\n return elm;\n }\n switch (elm.type) {\n case \"u\":\n data = createUIntBuffer(elm.value);\n break;\n case \"i\":\n data = createIntBuffer(elm.value);\n break;\n case \"f\":\n data = createFloatBuffer(elm.value);\n break;\n case \"s\":\n data = new exports.Buffer(elm.value, 'ascii');\n break;\n case \"8\":\n data = new exports.Buffer(elm.value, 'utf8');\n break;\n case \"b\":\n data = elm.value;\n break;\n case \"d\":\n data = new int64_buffer_1.Int64BE(elm.value.getTime().toString()).toBuffer();\n break;\n }\n return Object.assign({}, elm, { data: data });\n}\nexports.encodeValueToBuffer = encodeValueToBuffer;\nfunction createUIntBuffer(value) {\n // Big-endian, any size from 1 to 8\n // but js number is float64, so max 6 bit octets\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Uint64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeUIntBE(value, 0, bytes);\n return data;\n}\nexports.createUIntBuffer = createUIntBuffer;\nfunction createIntBuffer(value) {\n // Big-endian, any size from 1 to 8 octets\n // but js number is float64, so max 6 bit\n var bytes = 1;\n for (; value >= Math.pow(2, 8 * bytes); bytes++) { }\n if (bytes >= 7) {\n console.warn(\"7bit or more bigger uint not supported.\");\n return new int64_buffer_1.Int64BE(value).toBuffer();\n }\n var data = new exports.Buffer(bytes);\n data.writeIntBE(value, 0, bytes);\n return data;\n}\nexports.createIntBuffer = createIntBuffer;\nfunction createFloatBuffer(value, bytes) {\n if (bytes === void 0) { bytes = 8; }\n // Big-endian, defined for 4 and 8 octets (32, 64 bits)\n // js number is float64 so 8 bytes.\n if (bytes === 8) {\n // 64bit\n var data = new exports.Buffer(8);\n data.writeDoubleBE(value, 0);\n return data;\n }\n else if (bytes === 4) {\n // 32bit\n var data = new exports.Buffer(4);\n data.writeFloatBE(value, 0);\n return data;\n }\n else {\n throw new Error(\"float type bits must 4bytes or 8bytes\");\n }\n}\nexports.createFloatBuffer = createFloatBuffer;\nfunction convertEBMLDateToJSDate(int64str) {\n if (int64str instanceof Date) {\n return int64str;\n }\n return new Date(new Date(\"2001-01-01T00:00:00.000Z\").getTime() + (Number(int64str) / 1000 / 1000));\n}\nexports.convertEBMLDateToJSDate = convertEBMLDateToJSDate;\n","var vint = require('./vint')\n\nfunction BufferReader (buffer) {\n this.buffer = buffer\n this.offset = 0\n}\n\n// a super limited subset of the node buffer API\nBufferReader.prototype.nextInt16BE = function () {\n var value = this.buffer.readInt16BE(this.offset)\n this.offset += 2\n return value\n}\n\nBufferReader.prototype.nextUInt8 = function () {\n var value = this.buffer.readUInt8(this.offset)\n this.offset += 1\n return value\n}\n\n// EBML variable sized integers\nBufferReader.prototype.nextUIntV = function () {\n var v = vint(this.buffer, this.offset)\n this.offset += v.length\n return v.value\n}\n\nBufferReader.prototype.nextIntV = function () {\n var v = vint(this.buffer, this.offset, true)\n this.offset += v.length\n return v.value\n}\n\n// buffer slice\nBufferReader.prototype.nextBuffer = function (length) {\n var buffer = length\n ? this.buffer.slice(this.offset, this.offset + length)\n : this.buffer.slice(this.offset)\n this.offset += length || this.length\n return buffer\n}\n\n// remaining bytes to read\nObject.defineProperty(BufferReader.prototype, 'length', {\n get: function () { return this.buffer.length - this.offset }\n})\n\nmodule.exports = BufferReader\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ebml_1 = require(\"./ebml\");\n/**\n * based on ts-ebml and support large file,optimize memory usage during repair\n *\n * @param blob the blob you need to fix\n * @returns the blob that has been fixed\n *\n */\nfunction fixWebmDuration(blob) {\n return __awaiter(this, void 0, void 0, function () {\n var decoder, reader, readstream, readerBlob, _a, done, value, elms, refinedMetadataBuf, refinedMetadataBlob, firstPartBlobWithoutMetadata, finalBlob;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!blob) {\n throw Error('call to fixWebmDuration requires a blob');\n }\n decoder = new ebml_1.Decoder();\n reader = new ebml_1.Reader();\n readstream = blob.stream();\n readerBlob = readstream.getReader();\n _b.label = 1;\n case 1:\n if (!true) return [3 /*break*/, 3];\n return [4 /*yield*/, readerBlob.read()];\n case 2:\n _a = _b.sent(), done = _a.done, value = _a.value;\n if (done) {\n reader.stop();\n return [3 /*break*/, 3];\n }\n elms = decoder.decode(value);\n // As browser upgrade webm meta attributes are gradually added, \n // so filter unknown type to bypass this issue.\n elms = elms === null || elms === void 0 ? void 0 : elms.filter(function (elm) { return elm.type !== 'unknown'; });\n elms.forEach(function (elm) {\n reader.read(elm);\n });\n value = null;\n return [3 /*break*/, 1];\n case 3:\n refinedMetadataBuf = ebml_1.tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\n refinedMetadataBlob = new Blob([refinedMetadataBuf], { type: blob.type });\n firstPartBlobWithoutMetadata = blob.slice(reader.metadataSize);\n finalBlob = new Blob([refinedMetadataBlob, firstPartBlobWithoutMetadata], { type: blob.type });\n return [2 /*return*/, finalBlob];\n }\n });\n });\n}\nexports.default = fixWebmDuration;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools_1 = require(\"./tools\");\nvar Tools = /** @class */ (function () {\n function Tools() {\n }\n /**\n * read variable length integer per\n * https://www.matroska.org/technical/specs/index.html#EBML_ex\n * @static\n * @param {Buffer} buffer containing input\n * @param {Number} [start=0] position in buffer\n * @returns {{length: Number, value: number}} value / length object\n */\n Tools.readVint = function (buffer, start) {\n if (start === void 0) { start = 0; }\n var length = 8 - Math.floor(Math.log2(buffer[start]));\n if (length > 8) {\n var number = Tools.readHexString(buffer, start, start + length);\n throw new Error(\"Unrepresentable length: \".concat(length, \" \").concat(number));\n }\n if (start + length > buffer.length) {\n return null;\n }\n var value = buffer[start] & ((1 << (8 - length)) - 1);\n for (var i = 1; i < length; i += 1) {\n if (i === 7) {\n if (value >= Math.pow(2, 8) && buffer[start + 7] > 0) {\n return { length: length, value: -1 };\n }\n }\n value *= Math.pow(2, 8);\n value += buffer[start + i];\n }\n return { length: length, value: value };\n };\n /**\n * write variable length integer\n * @static\n * @param {Number} value to store into buffer\n * @returns {Buffer} containing the value\n */\n Tools.writeVint = function (value) {\n if (value < 0 || value > Math.pow(2, 53)) {\n throw new Error(\"Unrepresentable value: \".concat(value));\n }\n var length = 1;\n for (length = 1; length <= 8; length += 1) {\n if (value < Math.pow(2, (7 * length)) - 1) {\n break;\n }\n }\n var buffer = tools_1.Buffer.alloc(length);\n var val = value;\n for (var i = 1; i <= length; i += 1) {\n var b = val & 0xff;\n buffer[length - i] = b;\n val -= b;\n val /= Math.pow(2, 8);\n }\n buffer[0] |= 1 << (8 - length);\n return buffer;\n };\n /**\n * *\n * concatenate two arrays of bytes\n * @static\n * @param {Buffer} a1 First array\n * @param {Buffer} a2 Second array\n * @returns {Buffer} concatenated arrays\n */\n Tools.concatenate = function (a1, a2) {\n // both null or undefined\n if (!a1 && !a2) {\n return tools_1.Buffer.from([]);\n }\n if (!a1 || a1.byteLength === 0) {\n return a2;\n }\n if (!a2 || a2.byteLength === 0) {\n return a1;\n }\n return tools_1.Buffer.from(__spreadArray(__spreadArray([], a1, true), a2, true));\n };\n /**\n * get a hex text string from Buff[start,end)\n * @param {Buffer} buff from which to read the string\n * @param {Number} [start=0] starting point (default 0)\n * @param {Number} [end=buff.byteLength] ending point (default the whole buffer)\n * @returns {string} the hex string\n */\n Tools.readHexString = function (buff, start, end) {\n if (start === void 0) { start = 0; }\n if (end === void 0) { end = buff.byteLength; }\n return Array.from(buff.slice(start, end))\n .map(function (q) { return Number(q).toString(16); })\n .reduce(function (acc, current) { return \"\".concat(acc).concat(current.padStart(2, '0')); }, '');\n };\n /**\n * tries to read out a UTF-8 encoded string\n * @param {Buffer} buff the buffer to attempt to read from\n * @return {string|null} the decoded text, or null if unable to\n */\n Tools.readUtf8 = function (buff) {\n try {\n return tools_1.Buffer.from(buff).toString('utf8');\n }\n catch (exception) {\n return null;\n }\n };\n /**\n * get an unsigned number from a buffer\n * @param {Buffer} buff from which to read variable-length unsigned number\n * @returns {number|string} result (in hex for lengths > 6)\n */\n Tools.readUnsigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getUint8(0);\n case 2:\n return b.getUint16(0);\n case 4:\n return b.getUint32(0);\n default:\n break;\n }\n if (buff.byteLength <= 6) {\n return buff.reduce(function (acc, current) { return acc * 256 + current; }, 0);\n }\n return Tools.readHexString(buff, 0, buff.byteLength);\n };\n /**\n * get an signed number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length signed number\n * @returns {number} result\n */\n Tools.readSigned = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return b.getInt8(0);\n case 2:\n return b.getInt16(0);\n case 4:\n return b.getInt32(0);\n default:\n return NaN;\n }\n };\n /**\n * get an floating-point number from a buffer\n * @static\n * @param {Buffer} buff from which to read variable-length floating-point number\n * @returns {number} result\n */\n Tools.readFloat = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 4:\n return b.getFloat32(0);\n case 8:\n return b.getFloat64(0);\n default:\n return NaN;\n }\n };\n /**\n * get a date from a buffer\n * @static\n * @param {Buffer} buff from which to read the date\n * @return {Date} result\n */\n Tools.readDate = function (buff) {\n var b = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);\n switch (buff.byteLength) {\n case 1:\n return new Date(b.getUint8(0));\n case 2:\n return new Date(b.getUint16(0));\n case 4:\n return new Date(b.getUint32(0));\n case 8:\n return new Date(Number.parseInt(Tools.readHexString(buff), 16));\n default:\n return new Date(0);\n }\n };\n /**\n * Reads the data from a tag\n * @static\n * @param {TagData} tagObj The tag object to be read\n * @param {Buffer} data Data to be transformed\n * @return {Tag} result\n */\n Tools.readDataFromTag = function (tagObj, data) {\n var type = tagObj.type, name = tagObj.name;\n var track = tagObj.track;\n var discardable = tagObj.discardable || false;\n var keyframe = tagObj.keyframe || false;\n var payload = null;\n var value;\n switch (type) {\n case 'u':\n value = Tools.readUnsigned(data);\n break;\n case 'f':\n value = Tools.readFloat(data);\n break;\n case 'i':\n value = Tools.readSigned(data);\n break;\n case 's':\n value = String.fromCharCode.apply(String, data);\n break;\n case '8':\n value = Tools.readUtf8(data);\n break;\n case 'd':\n value = Tools.readDate(data);\n break;\n default:\n break;\n }\n if (name === 'SimpleBlock' || name === 'Block') {\n var p = 0;\n var _a = Tools.readVint(data, p), length_1 = _a.length, trak = _a.value;\n p += length_1;\n track = trak;\n value = Tools.readSigned(data.subarray(p, p + 2));\n p += 2;\n if (name === 'SimpleBlock') {\n keyframe = Boolean(data[length_1 + 2] & 0x80);\n discardable = Boolean(data[length_1 + 2] & 0x01);\n }\n p += 1;\n payload = data.subarray(p);\n }\n return __assign(__assign({}, tagObj), { data: data, discardable: discardable, keyframe: keyframe, payload: payload, track: track, value: value });\n };\n return Tools;\n}());\nexports.default = Tools;\n","// int64-buffer.js\n\n/*jshint -W018 */ // Confusing use of '!'.\n/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression.\n/*jshint -W093 */ // Did you mean to return a conditional instead of an assignment?\n\nvar Uint64BE, Int64BE, Uint64LE, Int64LE;\n\n!function(exports) {\n // constants\n\n var UNDEFINED = \"undefined\";\n var BUFFER = (UNDEFINED !== typeof Buffer) && Buffer;\n var UINT8ARRAY = (UNDEFINED !== typeof Uint8Array) && Uint8Array;\n var ARRAYBUFFER = (UNDEFINED !== typeof ArrayBuffer) && ArrayBuffer;\n var ZERO = [0, 0, 0, 0, 0, 0, 0, 0];\n var isArray = Array.isArray || _isArray;\n var BIT32 = 4294967296;\n var BIT24 = 16777216;\n\n // storage class\n\n var storage; // Array;\n\n // generate classes\n\n Uint64BE = factory(\"Uint64BE\", true, true);\n Int64BE = factory(\"Int64BE\", true, false);\n Uint64LE = factory(\"Uint64LE\", false, true);\n Int64LE = factory(\"Int64LE\", false, false);\n\n // class factory\n\n function factory(name, bigendian, unsigned) {\n var posH = bigendian ? 0 : 4;\n var posL = bigendian ? 4 : 0;\n var pos0 = bigendian ? 0 : 3;\n var pos1 = bigendian ? 1 : 2;\n var pos2 = bigendian ? 2 : 1;\n var pos3 = bigendian ? 3 : 0;\n var fromPositive = bigendian ? fromPositiveBE : fromPositiveLE;\n var fromNegative = bigendian ? fromNegativeBE : fromNegativeLE;\n var proto = Int64.prototype;\n var isName = \"is\" + name;\n var _isInt64 = \"_\" + isName;\n\n // properties\n proto.buffer = void 0;\n proto.offset = 0;\n proto[_isInt64] = true;\n\n // methods\n proto.toNumber = toNumber;\n proto.toString = toString;\n proto.toJSON = toNumber;\n proto.toArray = toArray;\n\n // add .toBuffer() method only when Buffer available\n if (BUFFER) proto.toBuffer = toBuffer;\n\n // add .toArrayBuffer() method only when Uint8Array available\n if (UINT8ARRAY) proto.toArrayBuffer = toArrayBuffer;\n\n // isUint64BE, isInt64BE\n Int64[isName] = isInt64;\n\n // CommonJS\n exports[name] = Int64;\n\n return Int64;\n\n // constructor\n function Int64(buffer, offset, value, raddix) {\n if (!(this instanceof Int64)) return new Int64(buffer, offset, value, raddix);\n return init(this, buffer, offset, value, raddix);\n }\n\n // isUint64BE, isInt64BE\n function isInt64(b) {\n return !!(b && b[_isInt64]);\n }\n\n // initializer\n function init(that, buffer, offset, value, raddix) {\n if (UINT8ARRAY && ARRAYBUFFER) {\n if (buffer instanceof ARRAYBUFFER) buffer = new UINT8ARRAY(buffer);\n if (value instanceof ARRAYBUFFER) value = new UINT8ARRAY(value);\n }\n\n // Int64BE() style\n if (!buffer && !offset && !value && !storage) {\n // shortcut to initialize with zero\n that.buffer = newArray(ZERO, 0);\n return;\n }\n\n // Int64BE(value, raddix) style\n if (!isValidBuffer(buffer, offset)) {\n var _storage = storage || Array;\n raddix = offset;\n value = buffer;\n offset = 0;\n buffer = (storage === BUFFER) ? BUFFER.alloc(8) : new _storage(8);\n }\n\n that.buffer = buffer;\n that.offset = offset |= 0;\n\n // Int64BE(buffer, offset) style\n if (UNDEFINED === typeof value) return;\n\n // Int64BE(buffer, offset, value, raddix) style\n if (\"string\" === typeof value) {\n fromString(buffer, offset, value, raddix || 10);\n } else if (isValidBuffer(value, raddix)) {\n fromArray(buffer, offset, value, raddix);\n } else if (\"number\" === typeof raddix) {\n writeInt32(buffer, offset + posH, value); // high\n writeInt32(buffer, offset + posL, raddix); // low\n } else if (value > 0) {\n fromPositive(buffer, offset, value); // positive\n } else if (value < 0) {\n fromNegative(buffer, offset, value); // negative\n } else {\n fromArray(buffer, offset, ZERO, 0); // zero, NaN and others\n }\n }\n\n function fromString(buffer, offset, str, raddix) {\n var pos = 0;\n var len = str.length;\n var high = 0;\n var low = 0;\n if (str[0] === \"-\") pos++;\n var sign = pos;\n while (pos < len) {\n var chr = parseInt(str[pos++], raddix);\n if (!(chr >= 0)) break; // NaN\n low = low * raddix + chr;\n high = high * raddix + Math.floor(low / BIT32);\n low %= BIT32;\n }\n if (sign) {\n high = ~high;\n if (low) {\n low = BIT32 - low;\n } else {\n high++;\n }\n }\n writeInt32(buffer, offset + posH, high);\n writeInt32(buffer, offset + posL, low);\n }\n\n function toNumber() {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n if (!unsigned) high |= 0; // a trick to get signed\n return high ? (high * BIT32 + low) : low;\n }\n\n function toString(radix) {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n var str = \"\";\n var sign = !unsigned && (high & 0x80000000);\n if (sign) {\n high = ~high;\n low = BIT32 - low;\n }\n radix = radix || 10;\n while (1) {\n var mod = (high % radix) * BIT32 + low;\n high = Math.floor(high / radix);\n low = Math.floor(mod / radix);\n str = (mod % radix).toString(radix) + str;\n if (!high && !low) break;\n }\n if (sign) {\n str = \"-\" + str;\n }\n return str;\n }\n\n function writeInt32(buffer, offset, value) {\n buffer[offset + pos3] = value & 255;\n value = value >> 8;\n buffer[offset + pos2] = value & 255;\n value = value >> 8;\n buffer[offset + pos1] = value & 255;\n value = value >> 8;\n buffer[offset + pos0] = value & 255;\n }\n\n function readInt32(buffer, offset) {\n return (buffer[offset + pos0] * BIT24) +\n (buffer[offset + pos1] << 16) +\n (buffer[offset + pos2] << 8) +\n buffer[offset + pos3];\n }\n }\n\n function toArray(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = null; // Array\n\n if (raw !== false && isArray(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n return newArray(buffer, offset);\n }\n\n function toBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = BUFFER;\n\n if (raw !== false && BUFFER.isBuffer(buffer)) {\n return (buffer.length === 8) ? buffer : buffer.slice(offset, offset + 8);\n }\n\n // Buffer.from(arraybuffer) available since Node v4.5.0\n // https://nodejs.org/en/blog/release/v4.5.0/\n return BUFFER.from(toArrayBuffer.call(this, raw));\n }\n\n function toArrayBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n var arrbuf = buffer.buffer;\n storage = UINT8ARRAY;\n\n // arrbuf.slice() ignores buffer.offset until Node v8.0.0\n if (raw !== false && !buffer.offset && (arrbuf instanceof ARRAYBUFFER)) {\n return (arrbuf.byteLength === 8) ? arrbuf : arrbuf.slice(offset, offset + 8);\n }\n\n var dest = new UINT8ARRAY(8);\n fromArray(dest, 0, buffer, offset);\n return dest.buffer;\n }\n\n function isValidBuffer(buffer, offset) {\n var len = buffer && buffer.length;\n offset |= 0;\n return len && (offset + 8 <= len) && (\"string\" !== typeof buffer[offset]);\n }\n\n function fromArray(destbuf, destoff, srcbuf, srcoff) {\n destoff |= 0;\n srcoff |= 0;\n for (var i = 0; i < 8; i++) {\n destbuf[destoff++] = srcbuf[srcoff++] & 255;\n }\n }\n\n function newArray(buffer, offset) {\n return Array.prototype.slice.call(buffer, offset, offset + 8);\n }\n\n function fromPositiveBE(buffer, offset, value) {\n var pos = offset + 8;\n while (pos > offset) {\n buffer[--pos] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeBE(buffer, offset, value) {\n var pos = offset + 8;\n value++;\n while (pos > offset) {\n buffer[--pos] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n function fromPositiveLE(buffer, offset, value) {\n var end = offset + 8;\n while (offset < end) {\n buffer[offset++] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeLE(buffer, offset, value) {\n var end = offset + 8;\n value++;\n while (offset < end) {\n buffer[offset++] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n // https://github.com/retrofox/is-array\n function _isArray(val) {\n return !!val && \"[object Array]\" == Object.prototype.toString.call(val);\n }\n\n}(typeof exports === 'object' && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n","var BufferReader = require('./lib/buffer-reader')\n\nvar XIPH_LACING = 1\nvar EBML_LACING = 3\nvar FIXED_SIZE_LACING = 2\n\nmodule.exports = function (buffer) {\n var block = {}\n var reader = new BufferReader(buffer)\n\n block.trackNumber = reader.nextUIntV()\n block.timecode = reader.nextInt16BE()\n\n var flags = reader.nextUInt8()\n\n block.invisible = !!(flags & 0x8)\n\n // only valid for SimpleBlock\n block.keyframe = !!(flags & 0x80)\n block.discardable = !!(flags & 0x1)\n\n var lacing = (flags & 0x6) >> 1\n\n block.frames = readLacedData(reader, lacing)\n\n return block\n}\n\nfunction readLacedData (reader, lacing) {\n if (!lacing) return [reader.nextBuffer()]\n\n var i, frameSize\n var frames = []\n var framesNum = reader.nextUInt8() + 1 // number of frames\n\n if (lacing === FIXED_SIZE_LACING) {\n // remaining data should be divisible by the number of frames\n if (reader.length % framesNum !== 0) throw new Error('Fixed-Size Lacing Error')\n\n frameSize = reader.length / framesNum\n for (i = 0; i < framesNum; i++) {\n frames.push(reader.nextBuffer(frameSize))\n }\n return frames\n }\n\n var frameSizes = []\n\n if (lacing === XIPH_LACING) {\n for (i = 0; i < framesNum - 1; i++) {\n var val\n frameSize = 0\n do {\n val = reader.nextUInt8()\n frameSize += val\n } while (val === 0xff)\n frameSizes.push(frameSize)\n }\n } else if (lacing === EBML_LACING) {\n // first frame\n frameSize = reader.nextUIntV()\n frameSizes.push(frameSize)\n\n // middle frames\n for (i = 1; i < framesNum - 1; i++) {\n frameSize += reader.nextIntV()\n frameSizes.push(frameSize)\n }\n }\n\n for (i = 0; i < framesNum - 1; i++) {\n frames.push(reader.nextBuffer(frameSizes[i]))\n }\n\n // last frame (remaining buffer)\n frames.push(reader.nextBuffer())\n\n return frames\n}\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tools = exports.Reader = exports.Encoder = exports.Decoder = void 0;\n__exportStar(require(\"./EBML\"), exports);\nvar EBMLDecoder_1 = require(\"./EBMLDecoder\");\nexports.Decoder = EBMLDecoder_1.default;\nvar EBMLEncoder_1 = require(\"./EBMLEncoder\");\nexports.Encoder = EBMLEncoder_1.default;\nvar EBMLReader_1 = require(\"./EBMLReader\");\nexports.Reader = EBMLReader_1.default;\nvar tools = require(\"./tools\");\nexports.tools = tools;\n","// https://github.com/themasch/node-ebml/blob/master/lib/ebml/tools.js\nmodule.exports = function (buffer, start, signed) {\n start = start || 0\n for (var length = 1; length <= 8; length++) {\n if (buffer[start] >= Math.pow(2, 8 - length)) {\n break\n }\n }\n if (length > 8) {\n throw new Error('Unrepresentable length: ' + length + ' ' +\n buffer.toString('hex', start, start + length))\n }\n if (start + length > buffer.length) {\n return null\n }\n var i\n var value = buffer[start] & (1 << (8 - length)) - 1\n for (i = 1; i < length; i++) {\n if (i === 7) {\n if (value >= Math.pow(2, 53 - 8) && buffer[start + 7] > 0) {\n return {\n length: length,\n value: -1\n }\n }\n }\n value *= Math.pow(2, 8)\n value += buffer[start + i]\n }\n if (signed) {\n value -= Math.pow(2, length * 7 - 1) - 1\n }\n return {\n length: length,\n value: value\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tools = require(\"./tools\");\nvar tools_1 = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar EBMLEncoder = /** @class */ (function () {\n function EBMLEncoder() {\n this._schema = ebmlID_1.byEbmlID;\n this._buffers = [];\n this._stack = [];\n }\n EBMLEncoder.prototype.encode = function (elms) {\n var _this = this;\n return tools.concat(elms.reduce(function (lst, elm) {\n return lst.concat(_this.encodeChunk(elm));\n }, [])).buffer;\n };\n EBMLEncoder.prototype.encodeChunk = function (elm) {\n if (elm.type === \"m\") {\n if (!elm.isEnd) {\n this.startTag(elm);\n }\n else {\n this.endTag(elm);\n }\n }\n else {\n // ensure that we are working with an internal `Buffer` instance\n elm.data = tools_1.Buffer.from(elm.data);\n this.writeTag(elm);\n }\n return this.flush();\n };\n EBMLEncoder.prototype.flush = function () {\n var ret = this._buffers;\n this._buffers = [];\n return ret;\n };\n EBMLEncoder.prototype.getSchemaInfo = function (tagName) {\n var tagNums = Object.keys(this._schema).map(Number);\n for (var i = 0; i < tagNums.length; i++) {\n var tagNum = tagNums[i];\n if (this._schema[tagNum].name === tagName) {\n return new tools_1.Buffer(tagNum.toString(16), 'hex');\n }\n }\n return null;\n };\n EBMLEncoder.prototype.writeTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n var tagData = elm.data;\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n var data = tools.encodeTag(tagId, tagData);\n /**\n * 親要素が閉じタグあり(isEnd)なら閉じタグが来るまで待つ(children queに入る)\n */\n if (this._stack.length > 0) {\n var last = this._stack[this._stack.length - 1];\n last.children.push({\n tagId: tagId,\n elm: elm,\n children: [],\n data: data\n });\n return;\n }\n this._buffers = this._buffers.concat(data);\n return;\n };\n EBMLEncoder.prototype.startTag = function (elm) {\n var tagName = elm.name;\n var tagId = this.getSchemaInfo(tagName);\n if (tagId == null) {\n throw new Error('No schema entry found for ' + tagName);\n }\n /**\n * 閉じタグ不定長の場合はスタックに積まずに即時バッファに書き込む\n */\n if (elm.unknownSize) {\n var data = tools.encodeTag(tagId, new tools_1.Buffer(0), elm.unknownSize);\n this._buffers = this._buffers.concat(data);\n return;\n }\n var tag = {\n tagId: tagId,\n elm: elm,\n children: [],\n data: null\n };\n if (this._stack.length > 0) {\n this._stack[this._stack.length - 1].children.push(tag);\n }\n this._stack.push(tag);\n };\n EBMLEncoder.prototype.endTag = function (elm) {\n var tagName = elm.name;\n var tag = this._stack.pop();\n if (tag == null) {\n throw new Error(\"EBML structure is broken\");\n }\n if (tag.elm.name !== elm.name) {\n throw new Error(\"EBML structure is broken\");\n }\n var childTagDataBuffers = tag.children.reduce(function (lst, child) {\n if (child.data === null) {\n throw new Error(\"EBML structure is broken\");\n }\n return lst.concat(child.data);\n }, []);\n var childTagDataBuffer = tools.concat(childTagDataBuffers);\n if (tag.elm.type === \"m\") {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer, tag.elm.unknownSize);\n }\n else {\n tag.data = tools.encodeTag(tag.tagId, childTagDataBuffer);\n }\n if (this._stack.length < 1) {\n this._buffers = this._buffers.concat(tag.data);\n }\n };\n return EBMLEncoder;\n}());\nexports.default = EBMLEncoder;\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar int64_buffer_1 = require(\"int64-buffer\");\nvar tools_1 = require(\"./tools\");\nvar tools = require(\"./tools\");\nvar ebmlID_1 = require(\"./ebmlID\");\nvar State;\n(function (State) {\n State[State[\"STATE_TAG\"] = 1] = \"STATE_TAG\";\n State[State[\"STATE_SIZE\"] = 2] = \"STATE_SIZE\";\n State[State[\"STATE_CONTENT\"] = 3] = \"STATE_CONTENT\";\n})(State || (State = {}));\nvar EBMLDecoder = /** @class */ (function () {\n function EBMLDecoder() {\n this._buffer = new tools_1.Buffer(0);\n this._tag_stack = [];\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._total = 0;\n this._schema = ebmlID_1.byEbmlID;\n this._result = [];\n }\n EBMLDecoder.prototype.decode = function (chunk) {\n this.readChunk(chunk);\n var diff = this._result;\n this._result = [];\n return diff;\n };\n EBMLDecoder.prototype.readChunk = function (chunk) {\n // 読みかけの(読めなかった) this._buffer と 新しい chunk を合わせて読み直す\n this._buffer = tools.concat([this._buffer, new tools_1.Buffer(chunk)]);\n while (this._cursor < this._buffer.length) {\n // console.log(this._cursor, this._total, this._tag_stack);\n if (this._state === State.STATE_TAG && !this.readTag()) {\n break;\n }\n if (this._state === State.STATE_SIZE && !this.readSize()) {\n break;\n }\n if (this._state === State.STATE_CONTENT && !this.readContent()) {\n break;\n }\n }\n };\n EBMLDecoder.prototype.getSchemaInfo = function (tagNum) {\n return this._schema[tagNum] || {\n name: \"unknown\",\n level: -1,\n type: \"unknown\",\n description: \"unknown\"\n };\n };\n /**\n * vint された parsing tag\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readTag = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml id vint without first byte\n var tag = (0, tools_1.readVint)(this._buffer, this._cursor);\n // tag が読めなかった\n if (tag == null) {\n return false;\n }\n // >>>>>>>>>\n // tag 識別子\n //const tagStr = this._buffer.toString(\"hex\", this._cursor, this._cursor + tag.length);\n //const tagNum = parseInt(tagStr, 16);\n // 上と等価\n var buf = this._buffer.slice(this._cursor, this._cursor + tag.length);\n var tagNum = buf.reduce(function (o, v, i, arr) { return o + v * Math.pow(16, 2 * (arr.length - 1 - i)); }, 0);\n var schema = this.getSchemaInfo(tagNum);\n var tagObj = {\n EBML_ID: tagNum.toString(16),\n schema: schema,\n type: schema.type,\n name: schema.name,\n level: schema.level,\n tagStart: this._total,\n tagEnd: this._total + tag.length,\n sizeStart: this._total + tag.length,\n sizeEnd: null,\n dataStart: null,\n dataEnd: null,\n dataSize: null,\n data: null\n };\n // | tag: vint | size: vint | data: Buffer(size) |\n this._tag_stack.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._cursor += tag.length;\n this._total += tag.length;\n // 読み込み状態変更\n this._state = State.STATE_SIZE;\n return true;\n };\n /**\n * vint された現在のタグの内容の大きさを読み込む\n * @return - return false when waiting for more data\n */\n EBMLDecoder.prototype.readSize = function () {\n // tag.length が buffer の外にある\n if (this._cursor >= this._buffer.length) {\n return false;\n }\n // read ebml datasize vint without first byte\n var size = (0, tools_1.readVint)(this._buffer, this._cursor);\n // まだ読めない\n if (size == null) {\n return false;\n }\n // >>>>>>>>>\n // current tag の data size 決定\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n tagObj.sizeEnd = tagObj.sizeStart + size.length;\n tagObj.dataStart = tagObj.sizeEnd;\n tagObj.dataSize = size.value;\n if (size.value === -1) {\n // unknown size\n tagObj.dataEnd = -1;\n if (tagObj.type === \"m\") {\n tagObj.unknownSize = true;\n }\n }\n else {\n tagObj.dataEnd = tagObj.sizeEnd + size.value;\n }\n // <<<<<<<<\n // ポインタを進める\n this._cursor += size.length;\n this._total += size.length;\n this._state = State.STATE_CONTENT;\n return true;\n };\n /**\n * データ読み込み\n */\n EBMLDecoder.prototype.readContent = function () {\n var tagObj = this._tag_stack[this._tag_stack.length - 1];\n // master element は子要素を持つので生データはない\n if (tagObj.type === 'm') {\n // console.log('content should be tags');\n tagObj.isEnd = false;\n this._result.push(tagObj);\n this._state = State.STATE_TAG;\n // この Mastert Element は空要素か\n if (tagObj.dataSize === 0) {\n // 即座に終了タグを追加\n var elm = Object.assign({}, tagObj, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop(); // スタックからこのタグを捨てる\n }\n return true;\n }\n // waiting for more data\n if (this._buffer.length < this._cursor + tagObj.dataSize) {\n return false;\n }\n // タグの中身の生データ\n var data = this._buffer.slice(this._cursor, this._cursor + tagObj.dataSize);\n // 読み終わったバッファを捨てて読み込んでいる部分のバッファのみ残す\n this._buffer = this._buffer.slice(this._cursor + tagObj.dataSize);\n tagObj.data = data;\n // >>>>>>>>>\n switch (tagObj.type) {\n //case \"m\": break;\n // Master-Element - contains other EBML sub-elements of the next lower level\n case \"u\":\n tagObj.value = data.readUIntBE(0, data.length);\n break;\n // Unsigned Integer - Big-endian, any size from 1 to 8 octets\n case \"i\":\n tagObj.value = data.readIntBE(0, data.length);\n break;\n // Signed Integer - Big-endian, any size from 1 to 8 octets\n case \"f\":\n tagObj.value = tagObj.dataSize === 4 ? data.readFloatBE(0) :\n tagObj.dataSize === 8 ? data.readDoubleBE(0) :\n (console.warn(\"cannot read \".concat(tagObj.dataSize, \" octets float. failback to 0\")), 0);\n break;\n // Float - Big-endian, defined for 4 and 8 octets (32, 64 bits)\n case \"s\":\n tagObj.value = data.toString(\"ascii\");\n break; // ascii\n // Printable ASCII (0x20 to 0x7E), zero-padded when needed\n case \"8\":\n tagObj.value = data.toString(\"utf8\");\n break;\n // Unicode string, zero padded when needed (RFC 2279)\n case \"b\":\n tagObj.value = data;\n break;\n // Binary - not interpreted by the parser\n case \"d\":\n tagObj.value = (0, tools_1.convertEBMLDateToJSDate)(new int64_buffer_1.Int64BE(data).toNumber());\n break;\n // nano second; Date.UTC(2001,1,1,0,0,0,0) === 980985600000\n // Date - signed 8 octets integer in nanoseconds with 0 indicating \n // the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)\n }\n if (tagObj.value === null) {\n throw new Error(\"unknown tag type:\" + tagObj.type);\n }\n this._result.push(tagObj);\n // <<<<<<<<\n // ポインタを進める\n this._total += tagObj.dataSize;\n // タグ待ちモードに変更\n this._state = State.STATE_TAG;\n this._cursor = 0;\n this._tag_stack.pop(); // remove the object from the stack\n while (this._tag_stack.length > 0) {\n var topEle = this._tag_stack[this._tag_stack.length - 1];\n // 親が不定長サイズなので閉じタグは期待できない\n if (topEle.dataEnd < 0) {\n this._tag_stack.pop(); // 親タグを捨てる\n return true;\n }\n // 閉じタグの来るべき場所まで来たかどうか\n if (this._total < topEle.dataEnd) {\n break;\n }\n // 閉じタグを挿入すべきタイミングが来た\n if (topEle.type !== \"m\") {\n throw new Error(\"parent element is not master element\");\n }\n var elm = Object.assign({}, topEle, { isEnd: true });\n this._result.push(elm);\n this._tag_stack.pop();\n }\n return true;\n };\n return EBMLDecoder;\n}());\nexports.default = EBMLDecoder;\n"],"names":["exports","read","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","i","d","s","NaN","Infinity","Math","pow","write","value","c","rt","abs","isNaN","floor","log","LN2","Object","defineProperty","byEbmlID","name","level","type","multiple","minver","webm","description","mandatory","range","cppname","bytesize","divx","position","type2","crc","extendStatics","__extends","this","b","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","constructor","create","events_1","tools","EBMLReader","_super","_this","logGroup","hasLoggingStarted","metadataloaded","chunks","stack","segmentOffset","last2SimpleBlockVideoTrackTimecode","last2SimpleBlockAudioTrackTimecode","lastClusterTimecode","lastClusterPosition","timecodeScale","metadataSize","metadatas","cues","firstVideoBlockRead","firstAudioBlockRead","currentTrack","TrackNumber","TrackType","DefaultDuration","CodecDelay","trackTypes","trackDefaultDuration","trackCodecDelay","trackInfo","ended","logging","use_duration_every_simpleblock","use_webp","use_segment_info","drop_default_duration","stop","emit_segment_info","length","pop","console","groupEnd","data","timecode","duration","emit","videoTrackNum","indexOf","audioTrackNum","trackNumber","elm","drop","isEnd","parent_1","dataEnd","dataSize","dataStart","unknownSize","o","assign","push","warn","_a","ebmlBlock","frames_1","frames","CueTime","CueTrack","CueClusterPosition","forEach","frame","slice","toString","webpBuf","VP8BitStreamToRiffWebPBuffer","webp","Blob","currentTime","tagStart","put","get","defaultDuration","codecDelay","lastTimecode","_defaultDuration","delay","enumerable","configurable","addListener","event","listener","groupCollapsed","group","EventEmitter","convertEBMLDateToJSDate","createFloatBuffer","createIntBuffer","createUIntBuffer","encodeValueToBuffer","concat","putRefinedMetaData","extractElement","removeElement","makeMetadataSeekable","createRIFFChunk","WebPBlockFilter","encodeTag","readBlock","writeVint","readVint","Buffer","int64_buffer_1","EBMLEncoder_1","_Buffer","tools_ebml_1","_block","FourCC","chunk","chunkSize","writeUInt32LE","byteLength","substr","idName","metadata","start","element","splice","Error","result","encodedSizeOfEbml","refinedMetaData","encorder","default","reduce","lst","encode","buf","refineMetadata","mesetadata","sizeDiff","info","clusterPtrs","_metadata","overwrited_1","insertTag","isArray","cueInfos","create_cue","seekhead_children","seeks","create_seek_from_clusters","tagName","children","insertHead","idx","apply","reverse","unshift","list","bytes","Uint64BE","toBuffer","writeUIntBE","Int64BE","writeIntBE","writeDoubleBE","writeFloatBE","tagId","tagData","elms","some","VP8Chunk","originalMetadata","cuesInfo","header","segmentContentStartPos","originalMetadataSize","infoSize","tracks","tracksSize","seekHeadSize","seekHead","cuesSize","lastSizeDifference","_loop_1","infoStart","tracksStart","cuesStart","sizeDifference","maxIterations","finalMetadata","ebml","payload","i_1","shift","originalPayloadOffsetEnd","ebmlSize","offsetDiff","payloadSize","segmentTagBuf","segmentSizeBuf","_segmentSize","newPayloadSize","refined","newNewRefinedSize","getTime","int64str","Date","Number","vint","BufferReader","nextInt16BE","readInt16BE","nextUInt8","readUInt8","nextUIntV","v","nextIntV","nextBuffer","module","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","done","then","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","op","ebml_1","blob","decoder","reader","readstream","readerBlob","refinedMetadataBuf","refinedMetadataBlob","firstPartBlobWithoutMetadata","_b","Decoder","Reader","stream","getReader","decode","filter","__assign","arguments","__spreadArray","to","from","pack","ar","l","tools_1","Tools","log2","number","readHexString","alloc","val","concatenate","a1","a2","buff","end","map","q","acc","current","padStart","readUtf8","exception","readUnsigned","DataView","byteOffset","getUint8","getUint16","getUint32","readSigned","getInt8","getInt16","getInt32","readFloat","getFloat32","getFloat64","readDate","parseInt","readDataFromTag","tagObj","track","discardable","keyframe","fromCharCode","length_1","subarray","Boolean","storage","UNDEFINED","BUFFER","UINT8ARRAY","Uint8Array","ARRAYBUFFER","ArrayBuffer","ZERO","BIT32","factory","bigendian","unsigned","posH","posL","pos0","pos1","pos2","pos3","fromPositive","fromPositiveBE","fromPositiveLE","fromNegative","fromNegativeBE","fromNegativeLE","proto","Int64","isName","_isInt64","toNumber","radix","high","readInt32","low","str","sign","mod","toJSON","toArray","toArrayBuffer","raddix","that","newArray","isValidBuffer","_storage","pos","len","chr","writeInt32","fromString","fromArray","init","raw","isBuffer","arrbuf","dest","destbuf","destoff","srcbuf","srcoff","nodeName","block","flags","invisible","lacing","frameSize","framesNum","frameSizes","readLacedData","__createBinding","k","k2","undefined","__exportStar","Encoder","EBMLDecoder_1","EBMLReader_1","signed","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","once","emitter","errorListener","err","removeListener","resolver","eventTargetAgnosticAddListener","handler","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","warned","w","count","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","unwrapListeners","arrayClone","listenerCount","copy","addEventListener","wrapListener","arg","removeEventListener","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","listeners","prependListener","prependOnceListener","originalListener","index","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","join","code","tripletToBase64","num","output","ebmlID_1","EBMLEncoder","_schema","_buffers","_stack","endTag","startTag","writeTag","flush","getSchemaInfo","tagNums","tagNum","tag","childTagDataBuffers","child","childTagDataBuffer","base64","ieee754","customInspectSymbol","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","encodingOrOffset","allocUnsafe","string","encoding","isEncoding","actual","isView","arrayView","isInstance","fromArrayBuffer","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","obj","checked","numberIsNaN","fromObject","toPrimitive","assertSize","size","array","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","min","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","poolSize","fill","allocUnsafeSlow","_isBuffer","compare","a","x","swap16","swap32","swap64","toLocaleString","equals","inspect","max","replace","trim","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","out","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeDoubleLE","targetStart","copyWithin","errors","E","sym","getMessage","Base","super","writable","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","split","base64clean","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","State","EBMLDecoder","_buffer","_tag_stack","_state","STATE_TAG","_cursor","_total","_result","readChunk","diff","readTag","STATE_SIZE","readSize","STATE_CONTENT","readContent","schema","EBML_ID","tagEnd","sizeStart","sizeEnd","topEle"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/892.prod.js b/umd/892.prod.js index bb7d8c98..0f43ba5c 100644 --- a/umd/892.prod.js +++ b/umd/892.prod.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[892],{96:function(d,$,t){t.d($,{A:function(){return P}});var n=t(3247),e=t(2582),r=t(4408),o=t(9710);function i(d,$,t){var e=new n.Ay(t).getCountryCodesForCallingCode(d);return e?e.filter(function(d){return function(d,$,t){var e=new n.Ay(t);if(e.selectNumberingPlan($),e.numberingPlan.possibleLengths().indexOf(d.length)>=0)return!0;return!1}($,d,t)}):[]}var a=t(9713),u=t(284),l=t(1528),c=/^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/;var f={formatExtension:function(d,$,t){return"".concat(d).concat(t.ext()).concat($)}};function s(d,$,t,e){if(t=t?function(){for(var d=1,$=arguments.length,t=new Array($),n=0;n<$;n++)t[n]=arguments[n];for(;d0){var $=d.leadingDigitsPatterns()[d.leadingDigitsPatterns().length-1];if(0!==i.search($))return!1}return(0,r.A)(i,d.pattern())}));return a?(0,l.A)(d,a,{useInternationalFormat:"INTERNATIONAL"===t,withNationalPrefix:!a.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!e||!1!==e.nationalPrefix,carrierCode:$,metadata:n}):d}function h(d,$,t,n){return $?n(d,$,t):d}function m(d){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},m(d)}function g(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function v(d){for(var $=1;$0&&n[i];if($.nationalPrefixTransformRule()&&a)e=d.replace(t,$.nationalPrefixTransformRule()),i>1&&(r=n[1]);else{var u=n[0];e=d.slice(u.length),a&&(r=n[1])}if(a){var l=d.indexOf(n[1]);d.slice(0,l)===$.numberingPlan.nationalPrefix()&&(o=$.numberingPlan.nationalPrefix())}else o=n[0];return{nationalNumber:e,nationalPrefix:o,carrierCode:r}}}return{nationalNumber:d}}t.d($,{A:function(){return n}})},1528:function(d,$,t){t.d($,{A:function(){return r},_:function(){return e}});var n=t(1135),e=/(\$\d)/;function r(d,$,t){var r=t.useInternationalFormat,o=t.withNationalPrefix,i=(t.carrierCode,t.metadata,d.replace(new RegExp($.pattern()),r?$.internationalFormat():o&&$.nationalPrefixFormattingRule()?$.format().replace(e,$.nationalPrefixFormattingRule()):$.format()));return r?(0,n.A)(i):i}},1786:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247);function e(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return r(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function o(d,$,t){return i(d,$,void 0,t)}function i(d,$,t,r){$&&(r=new n.Ay(r.metadata)).selectNumberingPlan($);var o=r.type(t),a=o&&o.possibleLengths()||r.possibleLengths();if(!a)return"IS_POSSIBLE";if("FIXED_LINE_OR_MOBILE"===t){if(!r.type("FIXED_LINE"))return i(d,$,"MOBILE",r);var u=r.type("MOBILE");u&&(a=function(d,$){for(var t,n=d.slice(),r=e($);!(t=r()).done;){var o=t.value;d.indexOf(o)<0&&n.push(o)}return n.sort(function(d,$){return d-$})}(a,u.possibleLengths()))}else if(t&&!o)return"INVALID_LENGTH";var l=d.length,c=a[0];return c===l?"IS_POSSIBLE":c>l?"TOO_SHORT":a[a.length-1]=0?"IS_POSSIBLE":"INVALID_LENGTH"}},2582:function(d,$,t){t.d($,{A:function(){return r},x:function(){return o}});var n=t(3247),e=t(1786);function r(d,$,t){if(void 0===$&&($={}),t=new n.Ay(t),$.v2){if(!d.countryCallingCode)throw new Error("Invalid phone number object passed");t.selectNumberingPlan(d.countryCallingCode)}else{if(!d.phone)return!1;if(d.country){if(!t.hasCountry(d.country))throw new Error("Unknown country: ".concat(d.country));t.selectNumberingPlan(d.country)}else{if(!d.countryCallingCode)throw new Error("Invalid phone number object passed");t.selectNumberingPlan(d.countryCallingCode)}}if(t.possibleLengths())return o(d.phone||d.nationalNumber,d.country,t);if(d.countryCallingCode&&t.isNonGeographicCallingCode(d.countryCallingCode))return!0;throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.')}function o(d,$,t){return"IS_POSSIBLE"===(0,e.A)(d,$,t)}},3247:function(d,$,t){function n(d,$){d=d.split("-"),$=$.split("-");for(var t=d[0].split("."),n=$[0].split("."),e=0;e<3;e++){var r=Number(t[e]),o=Number(n[e]);if(r>o)return 1;if(o>r)return-1;if(!isNaN(r)&&isNaN(o))return 1;if(isNaN(r)&&!isNaN(o))return-1}return d[1]&&$[1]?d[1]>$[1]?1:d[1]<$[1]?-1:0:!d[1]&&$[1]?1:d[1]&&!$[1]?-1:0}t.d($,{Ay:function(){return f},Ko:function(){return p},aR:function(){return v}});var e=t(284);function r(d){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},r(d)}function o(d,$){if(!(d instanceof $))throw new TypeError("Cannot call a class as a function")}function i(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(d,u(n.key),n)}}function a(d,$,t){return $&&i(d.prototype,$),t&&i(d,t),Object.defineProperty(d,"prototype",{writable:!1}),d}function u(d){var $=function(d,$){if("object"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===$?String:Number)(d)}(d,"string");return"symbol"==r($)?$:$+""}var l=" ext. ",c=/^\d+$/,f=function(){return a(function d($){o(this,d),v($),this.metadata=$,C.call(this,$)},[{key:"getCountries",value:function(){return Object.keys(this.metadata.countries).filter(function(d){return"001"!==d})}},{key:"getCountryMetadata",value:function(d){return this.metadata.countries[d]}},{key:"nonGeographic",value:function(){if(!(this.v1||this.v2||this.v3))return this.metadata.nonGeographic||this.metadata.nonGeographical}},{key:"hasCountry",value:function(d){return void 0!==this.getCountryMetadata(d)}},{key:"hasCallingCode",value:function(d){if(this.getCountryCodesForCallingCode(d))return!0;if(this.nonGeographic()){if(this.nonGeographic()[d])return!0}else{var $=this.countryCallingCodes()[d];if($&&1===$.length&&"001"===$[0])return!0}}},{key:"isNonGeographicCallingCode",value:function(d){return this.nonGeographic()?!!this.nonGeographic()[d]:!this.getCountryCodesForCallingCode(d)}},{key:"country",value:function(d){return this.selectNumberingPlan(d)}},{key:"selectNumberingPlan",value:function(d,$){if(d&&c.test(d)&&($=d,d=null),d&&"001"!==d){if(!this.hasCountry(d))throw new Error("Unknown country: ".concat(d));this.numberingPlan=new s(this.getCountryMetadata(d),this)}else if($){if(!this.hasCallingCode($))throw new Error("Unknown calling code: ".concat($));this.numberingPlan=new s(this.getNumberingPlanMetadata($),this)}else this.numberingPlan=void 0;return this}},{key:"getCountryCodesForCallingCode",value:function(d){var $=this.countryCallingCodes()[d];if($){if(1===$.length&&3===$[0].length)return;return $}}},{key:"getCountryCodeForCallingCode",value:function(d){var $=this.getCountryCodesForCallingCode(d);if($)return $[0]}},{key:"getNumberingPlanMetadata",value:function(d){var $=this.getCountryCodeForCallingCode(d);if($)return this.getCountryMetadata($);if(this.nonGeographic()){var t=this.nonGeographic()[d];if(t)return t}else{var n=this.countryCallingCodes()[d];if(n&&1===n.length&&"001"===n[0])return this.metadata.countries["001"]}}},{key:"countryCallingCode",value:function(){return this.numberingPlan.callingCode()}},{key:"IDDPrefix",value:function(){return this.numberingPlan.IDDPrefix()}},{key:"defaultIDDPrefix",value:function(){return this.numberingPlan.defaultIDDPrefix()}},{key:"nationalNumberPattern",value:function(){return this.numberingPlan.nationalNumberPattern()}},{key:"possibleLengths",value:function(){return this.numberingPlan.possibleLengths()}},{key:"formats",value:function(){return this.numberingPlan.formats()}},{key:"nationalPrefixForParsing",value:function(){return this.numberingPlan.nationalPrefixForParsing()}},{key:"nationalPrefixTransformRule",value:function(){return this.numberingPlan.nationalPrefixTransformRule()}},{key:"leadingDigits",value:function(){return this.numberingPlan.leadingDigits()}},{key:"hasTypes",value:function(){return this.numberingPlan.hasTypes()}},{key:"type",value:function(d){return this.numberingPlan.type(d)}},{key:"ext",value:function(){return this.numberingPlan.ext()}},{key:"countryCallingCodes",value:function(){return this.v1?this.metadata.country_phone_code_to_countries:this.metadata.country_calling_codes}},{key:"chooseCountryByCountryCallingCode",value:function(d){return this.selectNumberingPlan(d)}},{key:"hasSelectedNumberingPlan",value:function(){return void 0!==this.numberingPlan}}])}(),s=function(){return a(function d($,t){o(this,d),this.globalMetadataObject=t,this.metadata=$,C.call(this,t.metadata)},[{key:"callingCode",value:function(){return this.metadata[0]}},{key:"getDefaultCountryMetadataForRegion",value:function(){return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())}},{key:"IDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[1]}},{key:"defaultIDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[12]}},{key:"nationalNumberPattern",value:function(){return this.v1||this.v2?this.metadata[1]:this.metadata[2]}},{key:"possibleLengths",value:function(){if(!this.v1)return this.metadata[this.v2?2:3]}},{key:"_getFormats",value:function(d){return d[this.v1?2:this.v2?3:4]}},{key:"formats",value:function(){var d=this,$=this._getFormats(this.metadata)||this._getFormats(this.getDefaultCountryMetadataForRegion())||[];return $.map(function($){return new y($,d)})}},{key:"nationalPrefix",value:function(){return this.metadata[this.v1?3:this.v2?4:5]}},{key:"_getNationalPrefixFormattingRule",value:function(d){return d[this.v1?4:this.v2?5:6]}},{key:"nationalPrefixFormattingRule",value:function(){return this._getNationalPrefixFormattingRule(this.metadata)||this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion())}},{key:"_nationalPrefixForParsing",value:function(){return this.metadata[this.v1?5:this.v2?6:7]}},{key:"nationalPrefixForParsing",value:function(){return this._nationalPrefixForParsing()||this.nationalPrefix()}},{key:"nationalPrefixTransformRule",value:function(){return this.metadata[this.v1?6:this.v2?7:8]}},{key:"_getNationalPrefixIsOptionalWhenFormatting",value:function(){return!!this.metadata[this.v1?7:this.v2?8:9]}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata)||this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion())}},{key:"leadingDigits",value:function(){return this.metadata[this.v1?8:this.v2?9:10]}},{key:"types",value:function(){return this.metadata[this.v1?9:this.v2?10:11]}},{key:"hasTypes",value:function(){return(!this.types()||0!==this.types().length)&&!!this.types()}},{key:"type",value:function(d){if(this.hasTypes()&&g(this.types(),d))return new m(g(this.types(),d),this)}},{key:"ext",value:function(){return this.v1||this.v2?l:this.metadata[13]||l}}])}(),y=function(){return a(function d($,t){o(this,d),this._format=$,this.metadata=t},[{key:"pattern",value:function(){return this._format[0]}},{key:"format",value:function(){return this._format[1]}},{key:"leadingDigitsPatterns",value:function(){return this._format[2]||[]}},{key:"nationalPrefixFormattingRule",value:function(){return this._format[3]||this.metadata.nationalPrefixFormattingRule()}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return!!this._format[4]||this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"nationalPrefixIsMandatoryWhenFormattingInNationalFormat",value:function(){return this.usesNationalPrefix()&&!this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"usesNationalPrefix",value:function(){return!(!this.nationalPrefixFormattingRule()||h.test(this.nationalPrefixFormattingRule()))}},{key:"internationalFormat",value:function(){return this._format[5]||this.format()}}])}(),h=/^\(?\$1\)?$/,m=function(){return a(function d($,t){o(this,d),this.type=$,this.metadata=t},[{key:"pattern",value:function(){return this.metadata.v1?this.type:this.type[0]}},{key:"possibleLengths",value:function(){if(!this.metadata.v1)return this.type[1]||this.metadata.possibleLengths()}}])}();function g(d,$){switch($){case"FIXED_LINE":return d[0];case"MOBILE":return d[1];case"TOLL_FREE":return d[2];case"PREMIUM_RATE":return d[3];case"PERSONAL_NUMBER":return d[4];case"VOICEMAIL":return d[5];case"UAN":return d[6];case"PAGER":return d[7];case"VOIP":return d[8];case"SHARED_COST":return d[9]}}function v(d){if(!d)throw new Error("[libphonenumber-js] `metadata` argument not passed. Check your arguments.");if(!(0,e.A)(d)||!(0,e.A)(d.countries))throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat((0,e.A)(d)?"an object of shape: { "+Object.keys(d).join(", ")+" }":"a "+b(d)+": "+d,"."))}var b=function(d){return r(d)};function p(d,$){if(($=new f($)).hasCountry(d))return $.selectNumberingPlan(d).countryCallingCode();throw new Error("Unknown country: ".concat(d))}function C(d){var $=d.version;"number"==typeof $?(this.v1=1===$,this.v2=2===$,this.v3=3===$,this.v4=4===$):$?-1===n($,"1.2.0")?this.v2=!0:-1===n($,"1.7.35")?this.v3=!0:this.v4=!0:this.v1=!0}},3578:function(d,$,t){function n(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return e(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}t.d($,{Ay:function(){return i},ZW:function(){return o}});var r={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};function o(d){return r[d]}function i(d){for(var $,t="",e=n(d.split(""));!($=e()).done;){var r=o($.value);r&&(t+=r)}return t}},4408:function(d,$,t){function n(d,$){return d=d||"",new RegExp("^(?:"+$+")$").test(d)}t.d($,{A:function(){return n}})},4573:function(d,$,t){t.d($,{A:function(){return i}});var n=t(1459),e=t(4408),r=t(1786),o=t(9495);function i(d,$,t){var i=(0,n.A)(d,t),a=i.carrierCode,u=i.nationalNumber;if(u!==d){if(!function(d,$,t){if((0,e.A)(d,t.nationalNumberPattern())&&!(0,e.A)($,t.nationalNumberPattern()))return!1;return!0}(d,u,t))return{nationalNumber:d};if(t.numberingPlan.possibleLengths()&&($||($=(0,o.A)(t.numberingPlan.callingCode(),{nationalNumber:u,metadata:t})),!function(d,$,t){switch((0,r.A)(d,$,t)){case"TOO_SHORT":case"INVALID_LENGTH":return!1;default:return!0}}(u,$,t)))return{nationalNumber:d}}return{nationalNumber:u,carrierCode:a}}},5693:function(d,$,t){t.d($,{A:function(){return e}});var n=t(1211);function e(d,$){var t=Array.prototype.slice.call($);return t.push(n.A),d.apply(this,t)}},6111:function(d,$,t){t.d($,{A:function(){return i}});var n=t(3247),e=t(9710);function r(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return o(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function i(d,$){var t=$.countries,o=$.metadata;o=new n.Ay(o);for(var i,a=r(t);!(i=a()).done;){var u=i.value;if(o.selectNumberingPlan(u),o.leadingDigits()){if(d&&0===d.search(o.leadingDigits()))return u}else if((0,e.A)({phone:d,country:u},void 0,o.metadata))return u}}},6128:function(d,$,t){t.d($,{Cb:function(){return e},Jq:function(){return r},OA:function(){return o},c7:function(){return n},tz:function(){return a},uD:function(){return i}});var n=2,e=17,r=3,o="0-90-9٠-٩۰-۹",i="".concat("-‐-―−ー-").concat("//").concat("..").concat("  ­​⁠ ").concat("()()[]\\[\\]").concat("~⁓∼~"),a="++"},6890:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247),e=t(6128),r=new RegExp("(["+e.OA+"])");function o(d,$,t,e){if($){var o=new n.Ay(e);o.selectNumberingPlan($,t);var i=new RegExp(o.IDDPrefix());if(0===d.search(i)){var a=(d=d.slice(d.match(i)[0].length)).match(r);if(!(a&&null!=a[1]&&a[1].length>0&&"0"===a[1]))return d}}}},8892:function(d,$,t){t.d($,{L:function(){return id}});var n=t(5693),e=t(6128);function r(d){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},r(d)}function o(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(d,i(n.key),n)}}function i(d){var $=function(d,$){if("object"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===$?String:Number)(d)}(d,"string");return"symbol"==r($)?$:$+""}function a(d,$,t){return $=f($),function(d,$){if($&&("object"==r($)||"function"==typeof $))return $;if(void 0!==$)throw new TypeError("Derived constructors may only return object or undefined");return function(d){if(void 0===d)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return d}(d)}(d,l()?Reflect.construct($,t||[],f(d).constructor):$.apply(d,t))}function u(d){var $="function"==typeof Map?new Map:void 0;return u=function(d){if(null===d||!function(d){try{return-1!==Function.toString.call(d).indexOf("[native code]")}catch($){return"function"==typeof d}}(d))return d;if("function"!=typeof d)throw new TypeError("Super expression must either be null or a function");if(void 0!==$){if($.has(d))return $.get(d);$.set(d,t)}function t(){return function(d,$,t){if(l())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,$);var e=new(d.bind.apply(d,n));return t&&c(e,t.prototype),e}(d,arguments,f(this).constructor)}return t.prototype=Object.create(d.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),c(t,d)},u(d)}function l(){try{var d=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(d){}return(l=function(){return!!d})()}function c(d,$){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(d,$){return d.__proto__=$,d},c(d,$)}function f(d){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(d){return d.__proto__||Object.getPrototypeOf(d)},f(d)}var s=function(d){function $(d){var t;return function(d,$){if(!(d instanceof $))throw new TypeError("Cannot call a class as a function")}(this,$),t=a(this,$,[d]),Object.setPrototypeOf(t,$.prototype),t.name=t.constructor.name,t}return function(d,$){if("function"!=typeof $&&null!==$)throw new TypeError("Super expression must either be null or a function");d.prototype=Object.create($&&$.prototype,{constructor:{value:d,writable:!0,configurable:!0}}),Object.defineProperty(d,"prototype",{writable:!1}),$&&c(d,$)}($,d),t=$,n&&o(t.prototype,n),e&&o(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,e}(u(Error)),y=t(3247),h=function(d){return"([".concat(e.OA,"]{1,").concat(d,"})")};function m(d){var $="[  \\t,]*",t="[:\\..]?[  \\t,-]*",n="#?",e="[  \\t]*";return";ext="+h("20")+"|"+($+"(?:e?xt(?:ensi(?:ó?|ó))?n?|e?xtn?|доб|anexo)"+t+h("20")+n)+"|"+($+"(?:[xx##~~]|int|int)"+t+h("9")+n)+"|"+("[- ]+"+h("6")+"#")+"|"+(e+"(?:,{2}|;)"+t+h("15")+n)+"|"+(e+"(?:,)+"+t+h("9")+n)}var g="["+e.OA+"]{"+e.c7+"}",v="["+e.tz+"]{0,1}(?:["+e.uD+"]*["+e.OA+"]){3,}["+e.uD+e.OA+"]*",b=new RegExp("^["+e.tz+"]{0,1}(?:["+e.uD+"]*["+e.OA+"]){1,2}$","i"),p=v+"(?:"+m()+")?",C=new RegExp("^"+g+"$|^"+p+"$","i");var P=new RegExp("(?:"+m()+")$","i");var A=t(3578);function O(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return N(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?N(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function N(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function w(d){for(var $,t="",n=O(d.split(""));!($=n()).done;){t+=E($.value,t)||""}return t}function E(d,$,t){return"+"===d?$?void("function"==typeof t&&t("end")):"+":(0,A.ZW)(d)}var S=t(2582),I=t(96),T=t(4408),M=t(9713),x=t(4573),R=t(9495),L="+",F="(["+e.OA+"]|[\\-\\.\\(\\)]?)",D="^\\"+L+F+"*["+e.OA+"]"+F+"*$",_=new RegExp(D,"g"),G=e.OA,j=new RegExp("^("+("["+G+"]+((\\-)*["+G+"])*")+"\\.)*"+("[a-zA-Z]+((\\-)*["+G+"])*")+"\\.?$","g"),k="tel:",B=";phone-context=",U=";isub=";function K(d,$){var t,n=$.extractFormattedPhoneNumber,e=function(d){var $=d.indexOf(B);if($<0)return null;var t=$+B.length;if(t>=d.length)return"";var n=d.indexOf(";",t);return n>=0?d.substring(t,n):d.substring(t)}(d);if(!function(d){return null===d||0!==d.length&&(_.test(d)||j.test(d))}(e))throw new s("NOT_A_NUMBER");if(null===e)t=n(d)||"";else{t="",e.charAt(0)===L&&(t+=e);var r,o=d.indexOf(k);r=o>=0?o+k.length:0;var i=d.indexOf(B);t+=d.substring(r,i)}var a=t.indexOf(U);if(a>0&&(t=t.substring(0,a)),""!==t)return t}var H=250,W=new RegExp("["+e.tz+e.OA+"]"),V=new RegExp("[^"+e.OA+"#]+$"),Z=!1;function Y(d,$,t){if($=$||{},t=new y.Ay(t),$.defaultCountry&&!t.hasCountry($.defaultCountry)){if($.v2)throw new s("INVALID_COUNTRY");throw new Error("Unknown country: ".concat($.defaultCountry))}var n=function(d,$,t){var n=K(d,{extractFormattedPhoneNumber:function(d){return function(d,$,t){if(!d)return;if(d.length>H){if(t)throw new s("TOO_LONG");return}if(!1===$)return d;var n=d.search(W);if(n<0)return;return d.slice(n).replace(V,"")}(d,t,$)}});if(!n)return{};if(!function(d){return d.length>=e.c7&&C.test(d)}(n))return function(d){return b.test(d)}(n)?{error:"TOO_SHORT"}:{};var r=function(d){var $=d.search(P);if($<0)return{};for(var t=d.slice(0,$),n=d.match(P),e=1;ee.Cb){if($.v2)throw new s("TOO_LONG");return{}}if($.v2){var m=new I.A(c,l,t.metadata);return u&&(m.country=u),h&&(m.carrierCode=h),o&&(m.ext=o),m.__countryCallingCodeSource=f,m}var g=!!($.extended?t.hasSelectedNumberingPlan():u)&&(0,T.A)(l,t.nationalNumberPattern());return $.extended?{country:u,countryCallingCode:c,carrierCode:h,valid:g,possible:!!g||!(!0!==$.extended||!t.possibleLengths()||!(0,S.x)(l,u,t)),phone:l,ext:o}:g?function(d,$,t){var n={country:d,phone:$};t&&(n.ext=t);return n}(u,l,o):{}}function J(d){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},J(d)}function X(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function Q(d){for(var $=1;$d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function rd(d){var $,t,n,e=nd(Array.prototype.slice.call(d),4),r=e[0],o=e[1],i=e[2],a=e[3];if("string"!=typeof r)throw new TypeError("A text for parsing must be a string.");if($=r,o&&"string"!=typeof o){if(!(0,z.A)(o))throw new Error("Invalid second argument: ".concat(o));i?(t=o,n=i):n=o}else a?(t=i,n=a):(t=void 0,n=i),o&&(t=function(d){for(var $=1;$=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}var i=["MOBILE","PREMIUM_RATE","TOLL_FREE","SHARED_COST","VOIP","PERSONAL_NUMBER","PAGER","UAN","VOICEMAIL"];function a(d,$,t){if($=$||{},d.country||d.countryCallingCode){(t=new n.Ay(t)).selectNumberingPlan(d.country,d.countryCallingCode);var o=$.v2?d.nationalNumber:d.phone;if((0,e.A)(o,t.nationalNumberPattern())){if(u(o,"FIXED_LINE",t))return t.type("MOBILE")&&""===t.type("MOBILE").pattern()?"FIXED_LINE_OR_MOBILE":t.type("MOBILE")?u(o,"MOBILE",t)?"FIXED_LINE_OR_MOBILE":"FIXED_LINE":"FIXED_LINE_OR_MOBILE";for(var a,l=r(i);!(a=l()).done;){var c=a.value;if(u(o,c,t))return c}}}}function u(d,$,t){return!(!($=t.type($))||!$.pattern())&&(!($.possibleLengths()&&$.possibleLengths().indexOf(d.length)<0)&&(0,e.A)(d,$.pattern()))}},9713:function(d,$,t){t.d($,{A:function(){return i}});var n=t(6890),e=t(283),r=t(3247),o=t(6128);function i(d,$,t,i,a){if(!d)return{};var u;if("+"!==d[0]){var l=(0,n.A)(d,$||t,i,a);if(!l||l===d){if($||t||i){var c=(0,e.A)(d,$,t,i,a),f=c.countryCallingCode,s=c.number;if(f)return{countryCallingCodeSource:"FROM_NUMBER_WITHOUT_PLUS_SIGN",countryCallingCode:f,number:s}}return{number:d}}u=!0,d="+"+l}if("0"===d[1])return{};a=new r.Ay(a);for(var y=2;y-1<=o.Jq&&y<=d.length;){var h=d.slice(1,y);if(a.hasCallingCode(h))return a.selectNumberingPlan(h),{countryCallingCodeSource:u?"FROM_NUMBER_WITH_IDD":"FROM_NUMBER_WITH_PLUS_SIGN",countryCallingCode:h,number:d.slice(y)};y++}return{}}}}]); +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[892],{96:function(d,$,t){t.d($,{A:function(){return P}});var n=t(3247),e=t(2582),r=t(4408),o=t(9710);function i(d,$,t){var e=new n.Ay(t).getCountryCodesForCallingCode(d);return e?e.filter(function(d){return function(d,$,t){var e=new n.Ay(t);if(e.selectNumberingPlan($),e.numberingPlan.possibleLengths().indexOf(d.length)>=0)return!0;return!1}($,d,t)}):[]}var a=t(9713),u=t(284),l=t(1528),c=/^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/;var f={formatExtension:function(d,$,t){return"".concat(d).concat(t.ext()).concat($)}};function s(d,$,t,e){if(t=t?function(){for(var d=1,$=arguments.length,t=new Array($),n=0;n<$;n++)t[n]=arguments[n];for(;d0){var $=d.leadingDigitsPatterns()[d.leadingDigitsPatterns().length-1];if(0!==i.search($))return!1}return(0,r.A)(i,d.pattern())}));return a?(0,l.A)(d,a,{useInternationalFormat:"INTERNATIONAL"===t,withNationalPrefix:!a.nationalPrefixIsOptionalWhenFormattingInNationalFormat()||!e||!1!==e.nationalPrefix,carrierCode:$,metadata:n}):d}function h(d,$,t,n){return $?n(d,$,t):d}function m(d){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},m(d)}function g(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function v(d){for(var $=1;$0&&n[i];if($.nationalPrefixTransformRule()&&a)e=d.replace(t,$.nationalPrefixTransformRule()),i>1&&(r=n[1]);else{var u=n[0];e=d.slice(u.length),a&&(r=n[1])}if(a){var l=d.indexOf(n[1]);d.slice(0,l)===$.numberingPlan.nationalPrefix()&&(o=$.numberingPlan.nationalPrefix())}else o=n[0];return{nationalNumber:e,nationalPrefix:o,carrierCode:r}}}return{nationalNumber:d}}t.d($,{A:function(){return n}})},1528:function(d,$,t){t.d($,{A:function(){return r},_:function(){return e}});var n=t(1135),e=/(\$\d)/;function r(d,$,t){var r=t.useInternationalFormat,o=t.withNationalPrefix,i=(t.carrierCode,t.metadata,d.replace(new RegExp($.pattern()),r?$.internationalFormat():o&&$.nationalPrefixFormattingRule()?$.format().replace(e,$.nationalPrefixFormattingRule()):$.format()));return r?(0,n.A)(i):i}},1786:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247);function e(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return r(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function o(d,$,t){return i(d,$,void 0,t)}function i(d,$,t,r){$&&(r=new n.Ay(r.metadata)).selectNumberingPlan($);var o=r.type(t),a=o&&o.possibleLengths()||r.possibleLengths();if(!a)return"IS_POSSIBLE";if("FIXED_LINE_OR_MOBILE"===t){if(!r.type("FIXED_LINE"))return i(d,$,"MOBILE",r);var u=r.type("MOBILE");u&&(a=function(d,$){for(var t,n=d.slice(),r=e($);!(t=r()).done;){var o=t.value;d.indexOf(o)<0&&n.push(o)}return n.sort(function(d,$){return d-$})}(a,u.possibleLengths()))}else if(t&&!o)return"INVALID_LENGTH";var l=d.length,c=a[0];return c===l?"IS_POSSIBLE":c>l?"TOO_SHORT":a[a.length-1]=0?"IS_POSSIBLE":"INVALID_LENGTH"}},2582:function(d,$,t){t.d($,{A:function(){return r},x:function(){return o}});var n=t(3247),e=t(1786);function r(d,$,t){if(void 0===$&&($={}),t=new n.Ay(t),$.v2){if(!d.countryCallingCode)throw new Error("Invalid phone number object passed");t.selectNumberingPlan(d.countryCallingCode)}else{if(!d.phone)return!1;if(d.country){if(!t.hasCountry(d.country))throw new Error("Unknown country: ".concat(d.country));t.selectNumberingPlan(d.country)}else{if(!d.countryCallingCode)throw new Error("Invalid phone number object passed");t.selectNumberingPlan(d.countryCallingCode)}}if(t.possibleLengths())return o(d.phone||d.nationalNumber,d.country,t);if(d.countryCallingCode&&t.isNonGeographicCallingCode(d.countryCallingCode))return!0;throw new Error('Missing "possibleLengths" in metadata. Perhaps the metadata has been generated before v1.0.18.')}function o(d,$,t){return"IS_POSSIBLE"===(0,e.A)(d,$,t)}},3247:function(d,$,t){function n(d,$){d=d.split("-"),$=$.split("-");for(var t=d[0].split("."),n=$[0].split("."),e=0;e<3;e++){var r=Number(t[e]),o=Number(n[e]);if(r>o)return 1;if(o>r)return-1;if(!isNaN(r)&&isNaN(o))return 1;if(isNaN(r)&&!isNaN(o))return-1}return d[1]&&$[1]?d[1]>$[1]?1:d[1]<$[1]?-1:0:!d[1]&&$[1]?1:d[1]&&!$[1]?-1:0}t.d($,{Ay:function(){return f},Ko:function(){return p},aR:function(){return v}});var e=t(284);function r(d){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},r(d)}function o(d,$){if(!(d instanceof $))throw new TypeError("Cannot call a class as a function")}function i(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(d,u(n.key),n)}}function a(d,$,t){return $&&i(d.prototype,$),t&&i(d,t),Object.defineProperty(d,"prototype",{writable:!1}),d}function u(d){var $=function(d,$){if("object"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===$?String:Number)(d)}(d,"string");return"symbol"==r($)?$:$+""}var l=" ext. ",c=/^\d+$/,f=function(){return a(function d($){o(this,d),v($),this.metadata=$,C.call(this,$)},[{key:"getCountries",value:function(){return Object.keys(this.metadata.countries).filter(function(d){return"001"!==d})}},{key:"getCountryMetadata",value:function(d){return this.metadata.countries[d]}},{key:"nonGeographic",value:function(){if(!(this.v1||this.v2||this.v3))return this.metadata.nonGeographic||this.metadata.nonGeographical}},{key:"hasCountry",value:function(d){return void 0!==this.getCountryMetadata(d)}},{key:"hasCallingCode",value:function(d){if(this.getCountryCodesForCallingCode(d))return!0;if(this.nonGeographic()){if(this.nonGeographic()[d])return!0}else{var $=this.countryCallingCodes()[d];if($&&1===$.length&&"001"===$[0])return!0}}},{key:"isNonGeographicCallingCode",value:function(d){return this.nonGeographic()?!!this.nonGeographic()[d]:!this.getCountryCodesForCallingCode(d)}},{key:"country",value:function(d){return this.selectNumberingPlan(d)}},{key:"selectNumberingPlan",value:function(d,$){if(d&&c.test(d)&&($=d,d=null),d&&"001"!==d){if(!this.hasCountry(d))throw new Error("Unknown country: ".concat(d));this.numberingPlan=new s(this.getCountryMetadata(d),this)}else if($){if(!this.hasCallingCode($))throw new Error("Unknown calling code: ".concat($));this.numberingPlan=new s(this.getNumberingPlanMetadata($),this)}else this.numberingPlan=void 0;return this}},{key:"getCountryCodesForCallingCode",value:function(d){var $=this.countryCallingCodes()[d];if($){if(1===$.length&&3===$[0].length)return;return $}}},{key:"getCountryCodeForCallingCode",value:function(d){var $=this.getCountryCodesForCallingCode(d);if($)return $[0]}},{key:"getNumberingPlanMetadata",value:function(d){var $=this.getCountryCodeForCallingCode(d);if($)return this.getCountryMetadata($);if(this.nonGeographic()){var t=this.nonGeographic()[d];if(t)return t}else{var n=this.countryCallingCodes()[d];if(n&&1===n.length&&"001"===n[0])return this.metadata.countries["001"]}}},{key:"countryCallingCode",value:function(){return this.numberingPlan.callingCode()}},{key:"IDDPrefix",value:function(){return this.numberingPlan.IDDPrefix()}},{key:"defaultIDDPrefix",value:function(){return this.numberingPlan.defaultIDDPrefix()}},{key:"nationalNumberPattern",value:function(){return this.numberingPlan.nationalNumberPattern()}},{key:"possibleLengths",value:function(){return this.numberingPlan.possibleLengths()}},{key:"formats",value:function(){return this.numberingPlan.formats()}},{key:"nationalPrefixForParsing",value:function(){return this.numberingPlan.nationalPrefixForParsing()}},{key:"nationalPrefixTransformRule",value:function(){return this.numberingPlan.nationalPrefixTransformRule()}},{key:"leadingDigits",value:function(){return this.numberingPlan.leadingDigits()}},{key:"hasTypes",value:function(){return this.numberingPlan.hasTypes()}},{key:"type",value:function(d){return this.numberingPlan.type(d)}},{key:"ext",value:function(){return this.numberingPlan.ext()}},{key:"countryCallingCodes",value:function(){return this.v1?this.metadata.country_phone_code_to_countries:this.metadata.country_calling_codes}},{key:"chooseCountryByCountryCallingCode",value:function(d){return this.selectNumberingPlan(d)}},{key:"hasSelectedNumberingPlan",value:function(){return void 0!==this.numberingPlan}}])}(),s=function(){return a(function d($,t){o(this,d),this.globalMetadataObject=t,this.metadata=$,C.call(this,t.metadata)},[{key:"callingCode",value:function(){return this.metadata[0]}},{key:"getDefaultCountryMetadataForRegion",value:function(){return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())}},{key:"IDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[1]}},{key:"defaultIDDPrefix",value:function(){if(!this.v1&&!this.v2)return this.metadata[12]}},{key:"nationalNumberPattern",value:function(){return this.v1||this.v2?this.metadata[1]:this.metadata[2]}},{key:"possibleLengths",value:function(){if(!this.v1)return this.metadata[this.v2?2:3]}},{key:"_getFormats",value:function(d){return d[this.v1?2:this.v2?3:4]}},{key:"formats",value:function(){var d=this,$=this._getFormats(this.metadata)||this._getFormats(this.getDefaultCountryMetadataForRegion())||[];return $.map(function($){return new y($,d)})}},{key:"nationalPrefix",value:function(){return this.metadata[this.v1?3:this.v2?4:5]}},{key:"_getNationalPrefixFormattingRule",value:function(d){return d[this.v1?4:this.v2?5:6]}},{key:"nationalPrefixFormattingRule",value:function(){return this._getNationalPrefixFormattingRule(this.metadata)||this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion())}},{key:"_nationalPrefixForParsing",value:function(){return this.metadata[this.v1?5:this.v2?6:7]}},{key:"nationalPrefixForParsing",value:function(){return this._nationalPrefixForParsing()||this.nationalPrefix()}},{key:"nationalPrefixTransformRule",value:function(){return this.metadata[this.v1?6:this.v2?7:8]}},{key:"_getNationalPrefixIsOptionalWhenFormatting",value:function(){return!!this.metadata[this.v1?7:this.v2?8:9]}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata)||this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion())}},{key:"leadingDigits",value:function(){return this.metadata[this.v1?8:this.v2?9:10]}},{key:"types",value:function(){return this.metadata[this.v1?9:this.v2?10:11]}},{key:"hasTypes",value:function(){return(!this.types()||0!==this.types().length)&&!!this.types()}},{key:"type",value:function(d){if(this.hasTypes()&&g(this.types(),d))return new m(g(this.types(),d),this)}},{key:"ext",value:function(){return this.v1||this.v2?l:this.metadata[13]||l}}])}(),y=function(){return a(function d($,t){o(this,d),this._format=$,this.metadata=t},[{key:"pattern",value:function(){return this._format[0]}},{key:"format",value:function(){return this._format[1]}},{key:"leadingDigitsPatterns",value:function(){return this._format[2]||[]}},{key:"nationalPrefixFormattingRule",value:function(){return this._format[3]||this.metadata.nationalPrefixFormattingRule()}},{key:"nationalPrefixIsOptionalWhenFormattingInNationalFormat",value:function(){return!!this._format[4]||this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"nationalPrefixIsMandatoryWhenFormattingInNationalFormat",value:function(){return this.usesNationalPrefix()&&!this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()}},{key:"usesNationalPrefix",value:function(){return!(!this.nationalPrefixFormattingRule()||h.test(this.nationalPrefixFormattingRule()))}},{key:"internationalFormat",value:function(){return this._format[5]||this.format()}}])}(),h=/^\(?\$1\)?$/,m=function(){return a(function d($,t){o(this,d),this.type=$,this.metadata=t},[{key:"pattern",value:function(){return this.metadata.v1?this.type:this.type[0]}},{key:"possibleLengths",value:function(){if(!this.metadata.v1)return this.type[1]||this.metadata.possibleLengths()}}])}();function g(d,$){switch($){case"FIXED_LINE":return d[0];case"MOBILE":return d[1];case"TOLL_FREE":return d[2];case"PREMIUM_RATE":return d[3];case"PERSONAL_NUMBER":return d[4];case"VOICEMAIL":return d[5];case"UAN":return d[6];case"PAGER":return d[7];case"VOIP":return d[8];case"SHARED_COST":return d[9]}}function v(d){if(!d)throw new Error("[libphonenumber-js] `metadata` argument not passed. Check your arguments.");if(!(0,e.A)(d)||!(0,e.A)(d.countries))throw new Error("[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got ".concat((0,e.A)(d)?"an object of shape: { "+Object.keys(d).join(", ")+" }":"a "+b(d)+": "+d,"."))}var b=function(d){return r(d)};function p(d,$){if(($=new f($)).hasCountry(d))return $.selectNumberingPlan(d).countryCallingCode();throw new Error("Unknown country: ".concat(d))}function C(d){var $=d.version;"number"==typeof $?(this.v1=1===$,this.v2=2===$,this.v3=3===$,this.v4=4===$):$?-1===n($,"1.2.0")?this.v2=!0:-1===n($,"1.7.35")?this.v3=!0:this.v4=!0:this.v1=!0}},3578:function(d,$,t){function n(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return e(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}t.d($,{Ay:function(){return i},ZW:function(){return o}});var r={0:"0",1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9","0":"0","1":"1","2":"2","3":"3","4":"4","5":"5","6":"6","7":"7","8":"8","9":"9","٠":"0","١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","۰":"0","۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9"};function o(d){return r[d]}function i(d){for(var $,t="",e=n(d.split(""));!($=e()).done;){var r=o($.value);r&&(t+=r)}return t}},4408:function(d,$,t){function n(d,$){return d=d||"",new RegExp("^(?:"+$+")$").test(d)}t.d($,{A:function(){return n}})},4573:function(d,$,t){t.d($,{A:function(){return i}});var n=t(1459),e=t(4408),r=t(1786),o=t(9495);function i(d,$,t){var i=(0,n.A)(d,t),a=i.carrierCode,u=i.nationalNumber;if(u!==d){if(!function(d,$,t){if((0,e.A)(d,t.nationalNumberPattern())&&!(0,e.A)($,t.nationalNumberPattern()))return!1;return!0}(d,u,t))return{nationalNumber:d};if(t.numberingPlan.possibleLengths()&&($||($=(0,o.A)(t.numberingPlan.callingCode(),{nationalNumber:u,metadata:t})),!function(d,$,t){switch((0,r.A)(d,$,t)){case"TOO_SHORT":case"INVALID_LENGTH":return!1;default:return!0}}(u,$,t)))return{nationalNumber:d}}return{nationalNumber:u,carrierCode:a}}},5693:function(d,$,t){t.d($,{A:function(){return e}});var n=t(1211);function e(d,$){var t=Array.prototype.slice.call($);return t.push(n.A),d.apply(this,t)}},6111:function(d,$,t){t.d($,{A:function(){return i}});var n=t(3247),e=t(9710);function r(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return o(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function i(d,$){var t=$.countries,o=$.metadata;o=new n.Ay(o);for(var i,a=r(t);!(i=a()).done;){var u=i.value;if(o.selectNumberingPlan(u),o.leadingDigits()){if(d&&0===d.search(o.leadingDigits()))return u}else if((0,e.A)({phone:d,country:u},void 0,o.metadata))return u}}},6128:function(d,$,t){t.d($,{Cb:function(){return e},Jq:function(){return r},OA:function(){return o},c7:function(){return n},tz:function(){return a},uD:function(){return i}});var n=2,e=17,r=3,o="0-90-9٠-٩۰-۹",i="".concat("-‐-―−ー-").concat("//").concat("..").concat("  ­​⁠ ").concat("()()[]\\[\\]").concat("~⁓∼~"),a="++"},6890:function(d,$,t){t.d($,{A:function(){return o}});var n=t(3247),e=t(6128),r=new RegExp("(["+e.OA+"])");function o(d,$,t,e){if($){var o=new n.Ay(e);o.selectNumberingPlan($,t);var i=new RegExp(o.IDDPrefix());if(0===d.search(i)){var a=(d=d.slice(d.match(i)[0].length)).match(r);if(!(a&&null!=a[1]&&a[1].length>0&&"0"===a[1]))return d}}}},8892:function(d,$,t){t.d($,{L:function(){return id}});var n=t(5693),e=t(6128);function r(d){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},r(d)}function o(d,$){for(var t=0;t<$.length;t++){var n=$[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(d,i(n.key),n)}}function i(d){var $=function(d,$){if("object"!=r(d)||!d)return d;var t=d[Symbol.toPrimitive];if(void 0!==t){var n=t.call(d,$||"default");if("object"!=r(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===$?String:Number)(d)}(d,"string");return"symbol"==r($)?$:$+""}function a(d,$,t){return $=f($),function(d,$){if($&&("object"==r($)||"function"==typeof $))return $;if(void 0!==$)throw new TypeError("Derived constructors may only return object or undefined");return function(d){if(void 0===d)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return d}(d)}(d,l()?Reflect.construct($,t||[],f(d).constructor):$.apply(d,t))}function u(d){var $="function"==typeof Map?new Map:void 0;return u=function(d){if(null===d||!function(d){try{return-1!==Function.toString.call(d).indexOf("[native code]")}catch($){return"function"==typeof d}}(d))return d;if("function"!=typeof d)throw new TypeError("Super expression must either be null or a function");if(void 0!==$){if($.has(d))return $.get(d);$.set(d,t)}function t(){return function(d,$,t){if(l())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,$);var e=new(d.bind.apply(d,n));return t&&c(e,t.prototype),e}(d,arguments,f(this).constructor)}return t.prototype=Object.create(d.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),c(t,d)},u(d)}function l(){try{var d=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(d){}return(l=function(){return!!d})()}function c(d,$){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(d,$){return d.__proto__=$,d},c(d,$)}function f(d){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(d){return d.__proto__||Object.getPrototypeOf(d)},f(d)}var s=function(d){function $(d){var t;return function(d,$){if(!(d instanceof $))throw new TypeError("Cannot call a class as a function")}(this,$),t=a(this,$,[d]),Object.setPrototypeOf(t,$.prototype),t.name=t.constructor.name,t}return function(d,$){if("function"!=typeof $&&null!==$)throw new TypeError("Super expression must either be null or a function");d.prototype=Object.create($&&$.prototype,{constructor:{value:d,writable:!0,configurable:!0}}),Object.defineProperty(d,"prototype",{writable:!1}),$&&c(d,$)}($,d),t=$,n&&o(t.prototype,n),e&&o(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,n,e}(u(Error)),y=t(3247),h=function(d){return"([".concat(e.OA,"]{1,").concat(d,"})")};function m(d){var $="[  \\t,]*",t="[:\\..]?[  \\t,-]*",n="#?",e="[  \\t]*";return";ext="+h("20")+"|"+($+"(?:e?xt(?:ensi(?:ó?|ó))?n?|e?xtn?|доб|anexo)"+t+h("20")+n)+"|"+($+"(?:[xx##~~]|int|int)"+t+h("9")+n)+"|"+("[- ]+"+h("6")+"#")+"|"+(e+"(?:,{2}|;)"+t+h("15")+n)+"|"+(e+"(?:,)+"+t+h("9")+n)}var g="["+e.OA+"]{"+e.c7+"}",v="["+e.tz+"]{0,1}(?:["+e.uD+"]*["+e.OA+"]){3,}["+e.uD+e.OA+"]*",b=new RegExp("^["+e.tz+"]{0,1}(?:["+e.uD+"]*["+e.OA+"]){1,2}$","i"),p=v+"(?:"+m()+")?",C=new RegExp("^"+g+"$|^"+p+"$","i");var P=new RegExp("(?:"+m()+")$","i");var A=t(3578);function O(d,$){var t="undefined"!=typeof Symbol&&d[Symbol.iterator]||d["@@iterator"];if(t)return(t=t.call(d)).next.bind(t);if(Array.isArray(d)||(t=function(d,$){if(d){if("string"==typeof d)return N(d,$);var t={}.toString.call(d).slice(8,-1);return"Object"===t&&d.constructor&&(t=d.constructor.name),"Map"===t||"Set"===t?Array.from(d):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?N(d,$):void 0}}(d))||$&&d&&"number"==typeof d.length){t&&(d=t);var n=0;return function(){return n>=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function N(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function w(d){for(var $,t="",n=O(d.split(""));!($=n()).done;){t+=E($.value,t)||""}return t}function E(d,$,t){return"+"===d?$?void("function"==typeof t&&t("end")):"+":(0,A.ZW)(d)}var S=t(2582),I=t(96),T=t(4408),M=t(9713),x=t(4573),R=t(9495),L="+",F="(["+e.OA+"]|[\\-\\.\\(\\)]?)",D="^\\"+L+F+"*["+e.OA+"]"+F+"*$",_=new RegExp(D,"g"),G=e.OA,j=new RegExp("^("+("["+G+"]+((\\-)*["+G+"])*")+"\\.)*"+("[a-zA-Z]+((\\-)*["+G+"])*")+"\\.?$","g"),k="tel:",B=";phone-context=",U=";isub=";function K(d,$){var t,n=$.extractFormattedPhoneNumber,e=function(d){var $=d.indexOf(B);if($<0)return null;var t=$+B.length;if(t>=d.length)return"";var n=d.indexOf(";",t);return n>=0?d.substring(t,n):d.substring(t)}(d);if(!function(d){return null===d||0!==d.length&&(_.test(d)||j.test(d))}(e))throw new s("NOT_A_NUMBER");if(null===e)t=n(d)||"";else{t="",e.charAt(0)===L&&(t+=e);var r,o=d.indexOf(k);r=o>=0?o+k.length:0;var i=d.indexOf(B);t+=d.substring(r,i)}var a=t.indexOf(U);if(a>0&&(t=t.substring(0,a)),""!==t)return t}var H=250,W=new RegExp("["+e.tz+e.OA+"]"),V=new RegExp("[^"+e.OA+"#]+$"),Z=!1;function Y(d,$,t){if($=$||{},t=new y.Ay(t),$.defaultCountry&&!t.hasCountry($.defaultCountry)){if($.v2)throw new s("INVALID_COUNTRY");throw new Error("Unknown country: ".concat($.defaultCountry))}var n=function(d,$,t){var n=K(d,{extractFormattedPhoneNumber:function(d){return function(d,$,t){if(!d)return;if(d.length>H){if(t)throw new s("TOO_LONG");return}if(!1===$)return d;var n=d.search(W);if(n<0)return;return d.slice(n).replace(V,"")}(d,t,$)}});if(!n)return{};if(!function(d){return d.length>=e.c7&&C.test(d)}(n))return function(d){return b.test(d)}(n)?{error:"TOO_SHORT"}:{};var r=function(d){var $=d.search(P);if($<0)return{};for(var t=d.slice(0,$),n=d.match(P),e=1;ee.Cb){if($.v2)throw new s("TOO_LONG");return{}}if($.v2){var m=new I.A(c,l,t.metadata);return u&&(m.country=u),h&&(m.carrierCode=h),o&&(m.ext=o),m.__countryCallingCodeSource=f,m}var g=!!($.extended?t.hasSelectedNumberingPlan():u)&&(0,T.A)(l,t.nationalNumberPattern());return $.extended?{country:u,countryCallingCode:c,carrierCode:h,valid:g,possible:!!g||!(!0!==$.extended||!t.possibleLengths()||!(0,S.x)(l,u,t)),phone:l,ext:o}:g?function(d,$,t){var n={country:d,phone:$};t&&(n.ext=t);return n}(u,l,o):{}}function J(d){return J="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d},J(d)}function X(d,$){var t=Object.keys(d);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(d);$&&(n=n.filter(function($){return Object.getOwnPropertyDescriptor(d,$).enumerable})),t.push.apply(t,n)}return t}function Q(d){for(var $=1;$d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}function rd(d){var $,t,n,e=nd(Array.prototype.slice.call(d),4),r=e[0],o=e[1],i=e[2],a=e[3];if("string"!=typeof r)throw new TypeError("A text for parsing must be a string.");if($=r,o&&"string"!=typeof o){if(!(0,z.A)(o))throw new Error("Invalid second argument: ".concat(o));i?(t=o,n=i):n=o}else a?(t=i,n=a):(t=void 0,n=i),o&&(t=function(d){for(var $=1;$=d.length?{done:!0}:{done:!1,value:d[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(d,$){(null==$||$>d.length)&&($=d.length);for(var t=0,n=Array($);t<$;t++)n[t]=d[t];return n}var i=["MOBILE","PREMIUM_RATE","TOLL_FREE","SHARED_COST","VOIP","PERSONAL_NUMBER","PAGER","UAN","VOICEMAIL"];function a(d,$,t){if($=$||{},d.country||d.countryCallingCode){(t=new n.Ay(t)).selectNumberingPlan(d.country,d.countryCallingCode);var o=$.v2?d.nationalNumber:d.phone;if((0,e.A)(o,t.nationalNumberPattern())){if(u(o,"FIXED_LINE",t))return t.type("MOBILE")&&""===t.type("MOBILE").pattern()?"FIXED_LINE_OR_MOBILE":t.type("MOBILE")?u(o,"MOBILE",t)?"FIXED_LINE_OR_MOBILE":"FIXED_LINE":"FIXED_LINE_OR_MOBILE";for(var a,l=r(i);!(a=l()).done;){var c=a.value;if(u(o,c,t))return c}}}}function u(d,$,t){return!(!($=t.type($))||!$.pattern())&&(!($.possibleLengths()&&$.possibleLengths().indexOf(d.length)<0)&&(0,e.A)(d,$.pattern()))}},9713:function(d,$,t){t.d($,{A:function(){return i}});var n=t(6890),e=t(283),r=t(3247),o=t(6128);function i(d,$,t,i,a){if(!d)return{};var u;if("+"!==d[0]){var l=(0,n.A)(d,$||t,i,a);if(!l||l===d){if($||t||i){var c=(0,e.A)(d,$,t,i,a),f=c.countryCallingCode,s=c.number;if(f)return{countryCallingCodeSource:"FROM_NUMBER_WITHOUT_PLUS_SIGN",countryCallingCode:f,number:s}}return{number:d}}u=!0,d="+"+l}if("0"===d[1])return{};a=new r.Ay(a);for(var y=2;y-1<=o.Jq&&y<=d.length;){var h=d.slice(1,y);if(a.hasCallingCode(h))return a.selectNumberingPlan(h),{countryCallingCodeSource:u?"FROM_NUMBER_WITH_IDD":"FROM_NUMBER_WITH_PLUS_SIGN",countryCallingCode:h,number:d.slice(y)};y++}return{}}}}]); //# sourceMappingURL=892.prod.js.map \ No newline at end of file diff --git a/umd/892.prod.js.map b/umd/892.prod.js.map index a1dedac9..140efa56 100644 --- a/umd/892.prod.js.map +++ b/umd/892.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"892.prod.js","mappings":"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AM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isObject.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js"],"sourcesContent":["import Metadata from '../metadata.js';\n\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return [];\n }\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n _metadata.selectNumberingPlan(country);\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// If the `country` supports IDD calling, it returns a preferred IDD prefix.\n// If the `country` doesn't support IDD calling, it returns `undefined`.\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n // for some weird reason: this line of code would cause the code coverage\n // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // options = { ...DEFAULT_OPTIONS, ...options }\n //\n options = merge({}, DEFAULT_OPTIONS, options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n metadata = new Metadata(metadata);\n\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance.\n // Also, according to the `PhoneNumber` class source code, `country` can't be \"001\".\n // It means that normally `input.country` or `input.countryCallingCode` is supposed\n // to be present because either of the two is always required to exist in a `PhoneNumber` instance.\n // This means that realistically, it's gonna step into either the first `if`\n // or the following `else if`, and normally it won't even reach the legacy-compatibility\n // `else return input.phone || ''` part.\n // So normally, it won't ever return an empty string here.\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n var number;\n switch (format) {\n case 'NATIONAL':\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance,\n // and a `PhoneNumber` class instance is always required to have a `nationalNumber`.\n // This means that the `if (!nationalNumber)` below is just for legacy-compatibility\n // and it normally can't really happen, so normally it won't ever return an empty string here.\n if (!nationalNumber) {\n return '';\n }\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n case 'IDD':\n // If the required `fromCountry` parameter is not passed, it will return `undefined`.\n if (!options.fromCountry) {\n return;\n // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n // If the country of the phone number doesn't support IDD calling, it will return `undefined`.\n if (!formattedNumber) {\n return;\n }\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n if (!format) {\n return number;\n }\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\n // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n // for some weird reason, it showed code coverage less than 100%.\n // That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // for (const format of availableFormats) { ... }\n //\n return pickFirstMatchingElement(availableFormats, function (format) {\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];\n // If leading digits don't match then move on to the next phone number format\n if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n return false;\n }\n }\n // Check that the national number matches the phone number format regular expression\n return matchesEntirely(nationalNumber, format.pattern());\n });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata);\n // When calling within the same country calling code.\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n }\n // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n return formattedNumber;\n }\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\nfunction merge() {\n var i = 1;\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n while (i < objects.length) {\n if (objects[i]) {\n for (var key in objects[i]) {\n objects[0][key] = objects[i][key];\n }\n }\n i++;\n }\n return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n var i = 0;\n while (i < elements.length) {\n if (testFunction(elements[i])) {\n return elements[i];\n }\n i++;\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport isViablePhoneNumber from './isViablePhoneNumber.js';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n var number;\n var ext;\n\n // Replace \"tel:\" with \"tel=\" for parsing convenience.\n text = text.replace(/^tel:/, 'tel=');\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n switch (name) {\n case 'tel':\n number = value;\n break;\n case 'ext':\n ext = value;\n break;\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n break;\n }\n }\n\n // If the phone number is not viable, then abort.\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n var result = {\n number: number\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n if (!number) {\n return '';\n }\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata, { validateMetadata } from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js';\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport isObject from './helpers/isObject.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n // Validate `countryOrCountryCallingCode` argument.\n if (!countryOrCountryCallingCode) {\n throw new TypeError('First argument is required');\n }\n if (typeof countryOrCountryCallingCode !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n // In case of public API use: `constructor(number, metadata)`.\n // Transform the arguments from `constructor(number, metadata)` to\n // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n throw new TypeError('`metadata` argument not passed');\n }\n if (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\n metadata = nationalNumber;\n var e164Number = countryOrCountryCallingCode;\n if (!E164_NUMBER_REGEXP.test(e164Number)) {\n throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n }\n var _extractCountryCallin = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata),\n _countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n nationalNumber = number;\n countryOrCountryCallingCode = _countryCallingCode;\n if (!nationalNumber) {\n throw new Error('Invalid `number` argument passed: too short');\n }\n }\n\n // Validate `nationalNumber` argument.\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` argument is required');\n }\n if (typeof nationalNumber !== 'string') {\n throw new TypeError('`nationalNumber` argument must be a string');\n }\n\n // Validate `metadata` argument.\n validateMetadata(metadata);\n\n // Initialize properties.\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n this.getMetadata = function () {\n return metadata;\n };\n }\n return _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n }\n\n // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n}();\nexport { PhoneNumber as default };\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson);\n // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n }\n\n // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","import { VALID_PUNCTUATION } from '../constants.js';\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-79]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"(?:[025-7]\\\\d|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7[1-8]\\\\d)\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[02-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:2\\\\d|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6(?:[25-9]\\\\d|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-3])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33622|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-7]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[579]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[1-48])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,0,[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[1-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-8]\\\\d|90)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[5-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[0-29]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"561(?:011|61\\\\d)\\\\d{4}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-35-9]|7[13-9])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[246])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[1689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[1278]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js';\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :\n // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n return merged.sort(function (a, b) {\n return a - b;\n });\n\n // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","import Metadata from '../metadata.js';\nimport mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, country, metadata) {\n return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nexport function checkNumberLengthForType(nationalNumber, country, type, metadata) {\n // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n // Most likely, in cases when there're multiple countries corresponding to the same\n // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n if (country) {\n metadata = new Metadata(metadata.metadata);\n metadata.selectNumberingPlan(country);\n }\n var type_info = metadata.type(type);\n\n // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);\n }\n var mobile_type = metadata.type('MOBILE');\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths());\n // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n }\n // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n var actual_length = nationalNumber.length;\n\n // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n }\n\n // We skip the first element since we've already checked it.\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n metadata = new Metadata(metadata);\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n }\n\n // Old metadata (< 1.0.18) had no \"possible length\" data.\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, country, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","function _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js';\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n return _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return;\n // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n }\n\n // Deprecated.\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n }\n\n // Deprecated.\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n }\n\n // Deprecated.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n }\n\n // Deprecated.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n }\n\n // Deprecated.\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n }\n\n // Deprecated.\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n }\n\n // Deprecated.\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n }\n\n // Deprecated.\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n }\n\n // Deprecated.\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n }\n\n // Deprecated.\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n}();\nexport { Metadata as default };\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n return _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n }\n\n // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n }\n\n // Is always present.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n }\n\n // Is only present when a country supports multiple IDD prefixes.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n }\n\n // \"possible length\" data is always present in Google's metadata.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n }\n\n // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n }\n\n // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n }\n\n // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n }\n // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n}();\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n this._format = format;\n this.metadata = metadata;\n }\n return _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n\n // Checks whether national prefix formatting rule contains national prefix.\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() &&\n // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n this.type = type;\n this.metadata = metadata;\n }\n return _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n}();\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n case 'MOBILE':\n return types[1];\n case 'TOLL_FREE':\n return types[2];\n case 'PREMIUM_RATE':\n return types[3];\n case 'PERSONAL_NUMBER':\n return types[4];\n case 'VOICEMAIL':\n return types[5];\n case 'UAN':\n return types[6];\n case 'PAGER':\n return types[7];\n case 'VOIP':\n return types[8];\n case 'SHARED_COST':\n return types[9];\n }\n}\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n }\n\n // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n // For that reason, it's not used in this detection algorithm.\n // Instead, it detects by `countries: {}` property existence.\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).ext();\n }\n return DEFAULT_EXT_PREFIX;\n}\n\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).countryCallingCode();\n }\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n var version = metadata.version;\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n}\n\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\nexport default function parseDigits(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n if (digit) {\n result += digit;\n }\n }\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regularExpressionText) {\n // If the assigning of the `''` default value is moved to the arguments above,\n // the code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryByCallingCode from './getCountryByCallingCode.js';\n\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Country, if known.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nexport default function extractNationalNumber(number, country, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n if (metadata.numberingPlan.possibleLengths()) {\n // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n if (!country) {\n country = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n }\n\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n\n// In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n }\n // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n // const matchingCountries = []\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.selectNumberingPlan(country);\n // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n }\n // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // When multiple countries share the same \"country calling code\",\n // type patterns aren't guaranteed to be unique among them.\n // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n //\n // That means that this `if` condition could be `true` for multiple countries from the list.\n // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n // it could as well be `\"CA\"`.\n //\n // There was also a time when this attempted to be overly smart\n // and kept track of all such multiple matching countries\n // and then picked the one that matched the `defaultCountry`, if provided.\n // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n // it would've returned `\"CA\"` instead of `\"US\"`.\n // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n // for the \"country calling code\".\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n //\n return country;\n //\n // The \"overly smart\" behavior code:\n //\n // if (defaultCountry) {\n // \tif (country === defaultCountry) {\n // \t\treturn country\n // \t} else {\n // \t\tmatchingCountries.push(country)\n // \t}\n // } else {\n // \treturn country\n // }\n }\n }\n\n // // Return the first (\"main\") one of the `matchingCountries`.\n // if (matchingCountries.length > 0) {\n // \treturn matchingCountries[0]\n // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n function ParseError(code) {\n var _this;\n _classCallCheck(this, ParseError);\n _this = _callSuper(this, ParseError, [code]);\n // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n Object.setPrototypeOf(_this, ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n _inherits(ParseError, _Error);\n return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","import { VALID_DIGITS } from '../../constants.js';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n var extLimitWhenNotSure = '6';\n\n /** @type {string} */\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n /** @type {string} */\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n var optionalExtnSuffix = \"#?\";\n\n // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n /** @type {string} */\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n /** @type {string} */\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n // When extension is not separated clearly.\n /** @type {string} */\n var ambiguousSeparator = \"[- ]+\";\n // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n /** @type {string} */\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n /** @type {string} */\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n /** @type {string} */\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n /** @type {string} */\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js';\n\n// Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + createExtensionPattern() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","import createExtensionPattern from './createExtensionPattern.js';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i');\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n if (start < 0) {\n return {};\n }\n // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { parseDigit } from './helpers/parseDigits.js';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n return result;\n}\n\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `eventListener` argument.\n //\n // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof eventListener === 'function') {\n eventListener('end');\n }\n return;\n }\n return '+';\n }\n // Allow digits.\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\n\nimport { VALID_DIGITS\n// PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n // If no phone-context parameter is present\n if (indexOfPhoneContext < 0) {\n return null;\n }\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n // If phone-context parameter is empty\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n // If phone-context is not the last parameter\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n if (phoneContext.length === 0) {\n return false;\n }\n\n // Does phone-context value match pattern of global-number-digits or domainname.\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n var phoneNumberString;\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = '';\n\n // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n }\n\n // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber;\n // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n /* istanbul ignore else */\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n }\n\n // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n }\n // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js';\n// import { parseRFC3966 } from './helpers/RFC3966.js'\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js';\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n\n // Validate `defaultCountry`.\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n }\n\n // Parse the phone number.\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error;\n\n // If the phone number is not viable then return nothing.\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n throw new ParseError('NOT_A_NUMBER');\n }\n return {};\n }\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n return {};\n }\n\n // Validate national (significant) number length.\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n\n // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n if (country) {\n phoneNumber.country = country;\n }\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n if (ext) {\n phoneNumber.ext = ext;\n }\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n }\n\n // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n }\n\n // isInternational: countryCallingCode !== undefined\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, country, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n return;\n }\n if (extract === false) {\n return text;\n }\n // Attempt to extract a possible number from the string passed in\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n if (startsAt < 0) {\n return;\n }\n return text\n // Trim everything to the left of the phone number\n .slice(startsAt)\n // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n });\n // If the phone number is not viable, then abort.\n if (!number) {\n return {};\n }\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n return {};\n }\n // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n var withExtensionStripped = extractExtension(number);\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n return {\n number: number\n };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n // The exact country of the phone number\n var country;\n\n // If `formattedPhoneNumber` is passed in \"international\" format,\n // choose a country by `countryCallingCode`.\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n }\n // Else, if `formattedPhoneNumber` is passed in \"national\" format,\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), country, metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n if (exactCountry === '001') {\n // Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.selectNumberingPlan(country);\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport isObject from './helpers/isObject.js';\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n var text;\n var options;\n var metadata;\n\n // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.');\n\n // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n }\n // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n metadata = _ref.metadata;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return;\n }\n // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n\n // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n // Is this national number even valid for this country\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n }\n\n // Is it fixed line number\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n /* istanbul ignore if */\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n return 'FIXED_LINE';\n }\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n if (!type || !type.pattern()) {\n return false;\n }\n // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nexport default function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n if (!number) {\n return {};\n }\n var isNumberWithIddPrefix;\n\n // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadata);\n // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || defaultCountry || defaultCallingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n }\n\n // `number` can only be international at this point.\n\n // Fast abortion: country codes do not begin with a '0'\n if (number[1] === '0') {\n return {};\n }\n metadata = new Metadata(metadata);\n\n // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n var i = 2;\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n i++;\n }\n return {};\n}\n\n// The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map"],"names":["getPossibleCountriesForNumber","callingCode","nationalNumber","metadata","possibleCountries","getCountryCodesForCallingCode","filter","country","_metadata","selectNumberingPlan","numberingPlan","possibleLengths","indexOf","length","couldNationalNumberBelongToCountry","SINGLE_IDD_PREFIX_REG_EXP","DEFAULT_OPTIONS","formatExtension","formattedNumber","extension","concat","ext","formatNumber","input","format","options","i","_len","arguments","objects","Array","_key","key","merge","hasCountry","Error","countryCallingCode","phone","number","v2","addExtension","formatNationalNumber","carrierCode","_ref","formatRFC3966","fromCountry","fromCountryCallingCode","iddPrefix","countryMetadata","defaultIDDPrefix","test","IDDPrefix","getIddPrefix","undefined","formatIDD","formatAs","availableFormats","formats","elements","testFunction","pickFirstMatchingElement","leadingDigitsPatterns","lastLeadingDigitsPattern","search","matchesEntirely","pattern","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefix","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","_defineProperties","toPrimitive","call","TypeError","String","Number","_toPrimitive","PhoneNumber","countryOrCountryCallingCode","a","n","_classCallCheck","this","isObject","countries","e164Number","E164_NUMBER_REGEXP","_extractCountryCallin","extractCountryCallingCode","_getCountryAndCountry","metadataJson","isCountryCode","getCountryAndCountryCallingCode","getMetadata","hasTypes","getNumberType","nationalNumberPattern","isValidNumber","isNonGeographicCallingCode","phoneNumber","_format","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","defaultCountry","defaultCallingCode","possibleShorterNumber","slice","possibleShorterNationalNumber","objectConstructor","object","applyInternationalSeparatorStyle","replace","RegExp","trim","extractNationalNumberFromPossiblyIncompleteNumber","nationalPrefixForParsing","prefixPattern","prefixMatch","exec","capturedGroupsCount","hasCapturedGroups","nationalPrefixTransformRule","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","FIRST_GROUP_PATTERN","internationalFormat","nationalPrefixFormattingRule","_createForOfIteratorHelperLoose","next","bind","isArray","_arrayLikeToArray","toString","name","from","_unsupportedIterableToArray","done","checkNumberLength","checkNumberLengthForType","type","type_info","possible_lengths","mobile_type","b","_step","merged","_iterator","element","sort","mergeArrays","actual_length","minimum_length","isPossiblePhoneNumber","isPossibleNumber","split","pa","pb","na","nb","isNaN","_createClass","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","validateMetadata","setVersion","_","countryCode","v1","v3","nonGeographic","nonGeographical","getCountryMetadata","countryCodes","countryCallingCodes","NumberingPlan","hasCallingCode","getNumberingPlanMetadata","getCountryCodeForCallingCode","leadingDigits","_type","country_phone_code_to_countries","country_calling_codes","globalMetadataObject","_this","_getFormats","getDefaultCountryMetadataForRegion","map","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","_getNationalPrefixIsOptionalWhenFormatting","types","_type2","getType","Type","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","join","typeOf","getCountryCallingCode","version","v4","DIGITS","parseDigit","character","parseDigits","string","result","digit","text","regularExpressionText","extractNationalNumber","_extractNationalNumbe","nationalNumberBefore","nationalNumberAfter","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","withMetadataArgument","func","_arguments","args","getCountryByNationalNumber","nationalPhoneNumber","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","VALID_PUNCTUATION","PLUS_CHARS","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","match","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_wrapNativeSuper","Map","Function","_isNativeFunction","has","get","set","Wrapper","p","_setPrototypeOf","_construct","create","Boolean","valueOf","setPrototypeOf","__proto__","getPrototypeOf","ParseError","_Error","code","_inherits","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","possibleSeparatorsNumberExtLabelNoComma","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","EXTN_PATTERN","parseIncompletePhoneNumber","parsePhoneNumberCharacter","prevParsedCharacters","eventListener","PLUS_SIGN","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","phoneNumberString","extractFormattedPhoneNumber","phoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","substring","extractPhoneContext","isPhoneContextValid","charAt","indexOfNationalNumber","indexOfRfc3966Prefix","indexOfIsdn","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","USE_NON_GEOGRAPHIC_COUNTRY_CODE","parse","_parseInput","extract","throwOnError","startsAt","_extractFormattedPhoneNumber","isViablePhoneNumber","isViablePhoneNumberStart","error","withExtensionStripped","start","numberWithoutExtension","matches","extractExtension","parseInput","formattedPhoneNumber","_parsePhoneNumber","countryCallingCodeSource","exactCountry","getCountryByCallingCode","parsePhoneNumber","hasSelectedNumberingPlan","__countryCallingCodeSource","valid","extended","possible","isPossible","_slicedToArray","_arrayWithHoles","l","u","f","_iterableToArrayLimit","_nonIterableRest","normalizeArguments","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","_normalizeArguments","parsePhoneNumberWithError","NON_FIXED_LINE_PHONE_TYPES","isNumberTypeEqualTo","isNumberWithIddPrefix","numberWithoutIDD","shorterNumber","_countryCallingCode"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"892.prod.js","mappings":"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GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,KAAK,KAAK,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,GAAK,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,KAAK,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,CAAC,MAAM,IAAM,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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isObject.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js"],"sourcesContent":["import Metadata from '../metadata.js';\n\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return [];\n }\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n _metadata.selectNumberingPlan(country);\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n // for some weird reason: this line of code would cause the code coverage\n // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // options = { ...DEFAULT_OPTIONS, ...options }\n //\n options = merge({}, DEFAULT_OPTIONS, options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n metadata = new Metadata(metadata);\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n var number;\n switch (format) {\n case 'NATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return '';\n }\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n case 'IDD':\n if (!options.fromCountry) {\n return;\n // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n if (!format) {\n return number;\n }\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\n // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n // for some weird reason, it showed code coverage less than 100%.\n // That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // for (const format of availableFormats) { ... }\n //\n return pickFirstMatchingElement(availableFormats, function (format) {\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];\n // If leading digits don't match then move on to the next phone number format\n if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n return false;\n }\n }\n // Check that the national number matches the phone number format regular expression\n return matchesEntirely(nationalNumber, format.pattern());\n });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata);\n // When calling within the same country calling code.\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n }\n // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n return formattedNumber;\n }\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\nfunction merge() {\n var i = 1;\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n while (i < objects.length) {\n if (objects[i]) {\n for (var key in objects[i]) {\n objects[0][key] = objects[i][key];\n }\n }\n i++;\n }\n return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n var i = 0;\n while (i < elements.length) {\n if (testFunction(elements[i])) {\n return elements[i];\n }\n i++;\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport isViablePhoneNumber from './isViablePhoneNumber.js';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n var number;\n var ext;\n\n // Replace \"tel:\" with \"tel=\" for parsing convenience.\n text = text.replace(/^tel:/, 'tel=');\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n switch (name) {\n case 'tel':\n number = value;\n break;\n case 'ext':\n ext = value;\n break;\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n break;\n }\n }\n\n // If the phone number is not viable, then abort.\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n var result = {\n number: number\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n if (!number) {\n return '';\n }\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata, { validateMetadata } from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js';\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport isObject from './helpers/isObject.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n // Validate `countryOrCountryCallingCode` argument.\n if (!countryOrCountryCallingCode) {\n throw new TypeError('First argument is required');\n }\n if (typeof countryOrCountryCallingCode !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n // In case of public API use: `constructor(number, metadata)`.\n // Transform the arguments from `constructor(number, metadata)` to\n // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n throw new TypeError('`metadata` argument not passed');\n }\n if (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\n metadata = nationalNumber;\n var e164Number = countryOrCountryCallingCode;\n if (!E164_NUMBER_REGEXP.test(e164Number)) {\n throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n }\n var _extractCountryCallin = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata),\n _countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n nationalNumber = number;\n countryOrCountryCallingCode = _countryCallingCode;\n if (!nationalNumber) {\n throw new Error('Invalid `number` argument passed: too short');\n }\n }\n\n // Validate `nationalNumber` argument.\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` argument is required');\n }\n if (typeof nationalNumber !== 'string') {\n throw new TypeError('`nationalNumber` argument must be a string');\n }\n\n // Validate `metadata` argument.\n validateMetadata(metadata);\n\n // Initialize properties.\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n this.getMetadata = function () {\n return metadata;\n };\n }\n return _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n }\n\n // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n}();\nexport { PhoneNumber as default };\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson);\n // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n }\n\n // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","import { VALID_PUNCTUATION } from '../constants.js';\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-79]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"(?:[025-7]\\\\d|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7[1-8]\\\\d)\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[02-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:2\\\\d|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6(?:[25-9]\\\\d|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-3])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33622|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-7]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[579]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[1-48])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,0,[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[1-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-8]\\\\d|90)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[5-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[0-29]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"561(?:011|61\\\\d)\\\\d{4}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-35-9]|7[13-9])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[246])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[1689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[1278]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js';\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :\n // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n return merged.sort(function (a, b) {\n return a - b;\n });\n\n // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","import Metadata from '../metadata.js';\nimport mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, country, metadata) {\n return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nexport function checkNumberLengthForType(nationalNumber, country, type, metadata) {\n // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n // Most likely, in cases when there're multiple countries corresponding to the same\n // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n if (country) {\n metadata = new Metadata(metadata.metadata);\n metadata.selectNumberingPlan(country);\n }\n var type_info = metadata.type(type);\n\n // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);\n }\n var mobile_type = metadata.type('MOBILE');\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths());\n // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n }\n // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n var actual_length = nationalNumber.length;\n\n // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n }\n\n // We skip the first element since we've already checked it.\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n metadata = new Metadata(metadata);\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n }\n\n // Old metadata (< 1.0.18) had no \"possible length\" data.\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, country, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","function _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js';\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n return _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return;\n // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n }\n\n // Deprecated.\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n }\n\n // Deprecated.\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n }\n\n // Deprecated.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n }\n\n // Deprecated.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n }\n\n // Deprecated.\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n }\n\n // Deprecated.\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n }\n\n // Deprecated.\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n }\n\n // Deprecated.\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n }\n\n // Deprecated.\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n }\n\n // Deprecated.\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n}();\nexport { Metadata as default };\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n return _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n }\n\n // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n }\n\n // Is always present.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n }\n\n // Is only present when a country supports multiple IDD prefixes.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n }\n\n // \"possible length\" data is always present in Google's metadata.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n }\n\n // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n }\n\n // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n }\n\n // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n }\n // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n}();\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n this._format = format;\n this.metadata = metadata;\n }\n return _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n\n // Checks whether national prefix formatting rule contains national prefix.\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() &&\n // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n this.type = type;\n this.metadata = metadata;\n }\n return _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n}();\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n case 'MOBILE':\n return types[1];\n case 'TOLL_FREE':\n return types[2];\n case 'PREMIUM_RATE':\n return types[3];\n case 'PERSONAL_NUMBER':\n return types[4];\n case 'VOICEMAIL':\n return types[5];\n case 'UAN':\n return types[6];\n case 'PAGER':\n return types[7];\n case 'VOIP':\n return types[8];\n case 'SHARED_COST':\n return types[9];\n }\n}\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n }\n\n // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n // For that reason, it's not used in this detection algorithm.\n // Instead, it detects by `countries: {}` property existence.\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).ext();\n }\n return DEFAULT_EXT_PREFIX;\n}\n\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).countryCallingCode();\n }\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n var version = metadata.version;\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n}\n\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\nexport default function parseDigits(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n if (digit) {\n result += digit;\n }\n }\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regularExpressionText) {\n // If the assigning of the `''` default value is moved to the arguments above,\n // the code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryByCallingCode from './getCountryByCallingCode.js';\n\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Country, if known.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nexport default function extractNationalNumber(number, country, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n if (metadata.numberingPlan.possibleLengths()) {\n // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n if (!country) {\n country = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n }\n\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n\n// In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n }\n // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n // const matchingCountries = []\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.selectNumberingPlan(country);\n // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n }\n // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // When multiple countries share the same \"country calling code\",\n // type patterns aren't guaranteed to be unique among them.\n // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n //\n // That means that this `if` condition could be `true` for multiple countries from the list.\n // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n // it could as well be `\"CA\"`.\n //\n // There was also a time when this attempted to be overly smart\n // and kept track of all such multiple matching countries\n // and then picked the one that matched the `defaultCountry`, if provided.\n // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n // it would've returned `\"CA\"` instead of `\"US\"`.\n // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n // for the \"country calling code\".\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n //\n return country;\n //\n // The \"overly smart\" behavior code:\n //\n // if (defaultCountry) {\n // \tif (country === defaultCountry) {\n // \t\treturn country\n // \t} else {\n // \t\tmatchingCountries.push(country)\n // \t}\n // } else {\n // \treturn country\n // }\n }\n }\n\n // // Return the first (\"main\") one of the `matchingCountries`.\n // if (matchingCountries.length > 0) {\n // \treturn matchingCountries[0]\n // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n function ParseError(code) {\n var _this;\n _classCallCheck(this, ParseError);\n _this = _callSuper(this, ParseError, [code]);\n // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n Object.setPrototypeOf(_this, ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n _inherits(ParseError, _Error);\n return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","import { VALID_DIGITS } from '../../constants.js';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n var extLimitWhenNotSure = '6';\n\n /** @type {string} */\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n /** @type {string} */\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n var optionalExtnSuffix = \"#?\";\n\n // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n /** @type {string} */\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n /** @type {string} */\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n // When extension is not separated clearly.\n /** @type {string} */\n var ambiguousSeparator = \"[- ]+\";\n // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n /** @type {string} */\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n /** @type {string} */\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n /** @type {string} */\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n /** @type {string} */\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js';\n\n// Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + createExtensionPattern() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","import createExtensionPattern from './createExtensionPattern.js';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i');\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n if (start < 0) {\n return {};\n }\n // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { parseDigit } from './helpers/parseDigits.js';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n return result;\n}\n\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `eventListener` argument.\n //\n // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof eventListener === 'function') {\n eventListener('end');\n }\n return;\n }\n return '+';\n }\n // Allow digits.\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\n\nimport { VALID_DIGITS\n// PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n // If no phone-context parameter is present\n if (indexOfPhoneContext < 0) {\n return null;\n }\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n // If phone-context parameter is empty\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n // If phone-context is not the last parameter\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n if (phoneContext.length === 0) {\n return false;\n }\n\n // Does phone-context value match pattern of global-number-digits or domainname.\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n var phoneNumberString;\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = '';\n\n // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n }\n\n // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber;\n // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n /* istanbul ignore else */\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n }\n\n // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n }\n // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js';\n// import { parseRFC3966 } from './helpers/RFC3966.js'\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js';\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n\n // Validate `defaultCountry`.\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n }\n\n // Parse the phone number.\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error;\n\n // If the phone number is not viable then return nothing.\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n throw new ParseError('NOT_A_NUMBER');\n }\n return {};\n }\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n return {};\n }\n\n // Validate national (significant) number length.\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n\n // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n if (country) {\n phoneNumber.country = country;\n }\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n if (ext) {\n phoneNumber.ext = ext;\n }\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n }\n\n // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n }\n\n // isInternational: countryCallingCode !== undefined\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, country, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n return;\n }\n if (extract === false) {\n return text;\n }\n // Attempt to extract a possible number from the string passed in\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n if (startsAt < 0) {\n return;\n }\n return text\n // Trim everything to the left of the phone number\n .slice(startsAt)\n // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n });\n // If the phone number is not viable, then abort.\n if (!number) {\n return {};\n }\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n return {};\n }\n // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n var withExtensionStripped = extractExtension(number);\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n return {\n number: number\n };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n // The exact country of the phone number\n var country;\n\n // If `formattedPhoneNumber` is passed in \"international\" format,\n // choose a country by `countryCallingCode`.\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n }\n // Else, if `formattedPhoneNumber` is passed in \"national\" format,\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), country, metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n if (exactCountry === '001') {\n // Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.selectNumberingPlan(country);\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport isObject from './helpers/isObject.js';\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n var text;\n var options;\n var metadata;\n\n // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.');\n\n // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n }\n // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n metadata = _ref.metadata;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return;\n }\n // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n\n // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n // Is this national number even valid for this country\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n }\n\n // Is it fixed line number\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n /* istanbul ignore if */\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n return 'FIXED_LINE';\n }\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n if (!type || !type.pattern()) {\n return false;\n }\n // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nexport default function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n if (!number) {\n return {};\n }\n var isNumberWithIddPrefix;\n\n // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadata);\n // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || defaultCountry || defaultCallingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n }\n\n // `number` can only be international at this point.\n\n // Fast abortion: country codes do not begin with a '0'\n if (number[1] === '0') {\n return {};\n }\n metadata = new Metadata(metadata);\n\n // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n var i = 2;\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n i++;\n }\n return {};\n}\n\n// The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map"],"names":["getPossibleCountriesForNumber","callingCode","nationalNumber","metadata","possibleCountries","getCountryCodesForCallingCode","filter","country","_metadata","selectNumberingPlan","numberingPlan","possibleLengths","indexOf","length","couldNationalNumberBelongToCountry","SINGLE_IDD_PREFIX_REG_EXP","DEFAULT_OPTIONS","formatExtension","formattedNumber","extension","concat","ext","formatNumber","input","format","options","i","_len","arguments","objects","Array","_key","key","merge","hasCountry","Error","countryCallingCode","phone","number","v2","addExtension","formatNationalNumber","carrierCode","_ref","formatRFC3966","fromCountry","fromCountryCallingCode","iddPrefix","countryMetadata","defaultIDDPrefix","test","IDDPrefix","getIddPrefix","undefined","formatIDD","formatAs","availableFormats","formats","elements","testFunction","pickFirstMatchingElement","leadingDigitsPatterns","lastLeadingDigitsPattern","search","matchesEntirely","pattern","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefix","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","_defineProperties","toPrimitive","call","TypeError","String","Number","_toPrimitive","PhoneNumber","countryOrCountryCallingCode","a","n","_classCallCheck","this","isObject","countries","e164Number","E164_NUMBER_REGEXP","_extractCountryCallin","extractCountryCallingCode","_getCountryAndCountry","metadataJson","isCountryCode","getCountryAndCountryCallingCode","getMetadata","hasTypes","getNumberType","nationalNumberPattern","isValidNumber","isNonGeographicCallingCode","phoneNumber","_format","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","defaultCountry","defaultCallingCode","possibleShorterNumber","slice","possibleShorterNationalNumber","objectConstructor","object","applyInternationalSeparatorStyle","replace","RegExp","trim","extractNationalNumberFromPossiblyIncompleteNumber","nationalPrefixForParsing","prefixPattern","prefixMatch","exec","capturedGroupsCount","hasCapturedGroups","nationalPrefixTransformRule","prefixBeforeNationalNumber","possiblePositionOfTheFirstCapturedGroup","FIRST_GROUP_PATTERN","internationalFormat","nationalPrefixFormattingRule","_createForOfIteratorHelperLoose","next","bind","isArray","_arrayLikeToArray","toString","name","from","_unsupportedIterableToArray","done","checkNumberLength","checkNumberLengthForType","type","type_info","possible_lengths","mobile_type","b","_step","merged","_iterator","element","sort","mergeArrays","actual_length","minimum_length","isPossiblePhoneNumber","isPossibleNumber","split","pa","pb","na","nb","isNaN","_createClass","DEFAULT_EXT_PREFIX","CALLING_CODE_REG_EXP","Metadata","validateMetadata","setVersion","_","countryCode","v1","v3","nonGeographic","nonGeographical","getCountryMetadata","countryCodes","countryCallingCodes","NumberingPlan","hasCallingCode","getNumberingPlanMetadata","getCountryCodeForCallingCode","leadingDigits","_type","country_phone_code_to_countries","country_calling_codes","globalMetadataObject","_this","_getFormats","getDefaultCountryMetadataForRegion","map","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","_getNationalPrefixIsOptionalWhenFormatting","types","_type2","getType","Type","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","join","typeOf","getCountryCallingCode","version","v4","DIGITS","parseDigit","character","parseDigits","string","result","digit","text","regularExpressionText","extractNationalNumber","_extractNationalNumbe","nationalNumberBefore","nationalNumberAfter","shouldHaveExtractedNationalPrefix","isPossibleIncompleteNationalNumber","withMetadataArgument","func","_arguments","args","getCountryByNationalNumber","nationalPhoneNumber","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","VALID_PUNCTUATION","PLUS_CHARS","CAPTURING_DIGIT_PATTERN","stripIddPrefix","IDDPrefixPattern","matchedGroups","match","_callSuper","_getPrototypeOf","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_isNativeReflectConstruct","Reflect","construct","_wrapNativeSuper","Map","Function","_isNativeFunction","has","get","set","Wrapper","p","_setPrototypeOf","_construct","create","Boolean","valueOf","setPrototypeOf","__proto__","getPrototypeOf","ParseError","_Error","code","_inherits","getExtensionDigitsPattern","maxLength","createExtensionPattern","purpose","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","possibleSeparatorsNumberExtLabelNoComma","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_PHONE_NUMBER","VALID_PHONE_NUMBER_START_REG_EXP","VALID_PHONE_NUMBER_WITH_EXTENSION","VALID_PHONE_NUMBER_PATTERN","EXTN_PATTERN","parseIncompletePhoneNumber","parsePhoneNumberCharacter","prevParsedCharacters","eventListener","PLUS_SIGN","RFC3966_PHONE_DIGIT_","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","ALPHANUM_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","phoneNumberString","extractFormattedPhoneNumber","phoneContext","numberToExtractFrom","indexOfPhoneContext","phoneContextStart","phoneContextEnd","substring","extractPhoneContext","isPhoneContextValid","charAt","indexOfNationalNumber","indexOfRfc3966Prefix","indexOfIsdn","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","AFTER_PHONE_NUMBER_END_PATTERN","USE_NON_GEOGRAPHIC_COUNTRY_CODE","parse","_parseInput","extract","throwOnError","startsAt","_extractFormattedPhoneNumber","isViablePhoneNumber","isViablePhoneNumberStart","error","withExtensionStripped","start","numberWithoutExtension","matches","extractExtension","parseInput","formattedPhoneNumber","_parsePhoneNumber","countryCallingCodeSource","exactCountry","getCountryByCallingCode","parsePhoneNumber","hasSelectedNumberingPlan","__countryCallingCodeSource","valid","extended","possible","isPossible","_slicedToArray","_arrayWithHoles","l","u","f","_iterableToArrayLimit","_nonIterableRest","normalizeArguments","_Array$prototype$slic2","arg_1","arg_2","arg_3","arg_4","_normalizeArguments","parsePhoneNumberWithError","NON_FIXED_LINE_PHONE_TYPES","isNumberTypeEqualTo","isNumberWithIddPrefix","numberWithoutIDD","shorterNumber","_countryCallingCode"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/index.prod.js.map b/umd/index.prod.js.map index ec687b75..bb994f68 100644 --- a/umd/index.prod.js.map +++ b/umd/index.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"index.prod.js","mappings":"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","sources":["webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/the-card-mini.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/external var \"QRCode\"","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./node_modules/@firebase/util/dist/postinstall.mjs","webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/acc-general-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tinode-webapp:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 8;\n\nexport default class Cropper extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Coordinates of the top left corner of the image in bounding box (container) coordinates.\n panX: 0,\n panY: 0,\n // Origin of the zoom in image coordinates.\n originX: 0,\n originY: 0,\n // Zoom scale.\n zoom: 1,\n // Zoom min and max.\n minZoom: 0.001,\n maxZoom: DEFAULT_MAX_ZOOM,\n };\n\n // References to DOM elements for hooking up events and getting screen dimensions.\n // The transparent element which captures mouse moves (moves with the image).\n this.overlay = React.createRef();\n // The image cutout window or view port (static).\n this.cutout = React.createRef();\n // Scaled and translated image preview.\n this.preview = React.createRef();\n // The main container (static).\n this.boundingBox = React.createRef();\n\n // The original image width and height before any scaling (does not change).\n this.imageWidth = 0;\n this.imageHeight = 0;\n\n // Mouse position when dragging.\n this.mouseX = 0\n this.mouseY = 0;\n // Length of the previous mouse move when dragging.\n this.prevDistance = 0;\n\n // Bounding rectangles of static elements (does not change).\n this.cutoutRect = {};\n this.bBoxRect = {};\n // Center of the bounding box (does not change).\n this.originX = 0;\n this.originY = 0;\n\n this.initScaling = this.initScaling.bind(this);\n this.onZoom = this.onZoom.bind(this);\n this.handleZoom = this.handleZoom.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.mouseMove = this.mouseMove.bind(this);\n this.mouseTouch = this.mouseTouch.bind(this);\n this.positionAll = this.positionAll.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n componentDidMount() {\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n // The rectangle position is in viewport coordinates.\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n // Center of the bounding box in container coordinates.\n this.originX = this.bBoxRect.width / 2;\n this.originY = this.bBoxRect.height / 2;\n\n // The cutout circle bounds in viewport coordinates.\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\n }\n\n componentWillUnmount() {\n if (this.overlay.current) {\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n }\n }\n\n // Position all elements.\n positionAll(panX, panY, zoom) {\n // Zoom origin in image preview coordinates.\n this.setState({\n panX: panX,\n panY: panY,\n zoom: zoom,\n originX: this.originX - panX,\n originY: this.originY - panY,\n });\n\n // Pass cut out coordinates to caller.\n const left = (this.originX - panX) * zoom - this.originX;\n const top = (this.originY - panY) * zoom - this.originY;\n this.props.onChange(\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n this.cutoutRect.width / zoom,\n this.cutoutRect.height / zoom,\n zoom);\n }\n\n // Check if new location is within the limits.\n static checkBound(currPan, img, cutout, delta) {\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n if (nextDiff == 0) {\n // Cutout is completely within the image.\n currPan += delta;\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n // Cutout is outside of the range but closer to the bound.\n currPan += delta;\n }\n return currPan;\n }\n\n initScaling() {\n // Initialize components.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n this.imageWidth = imgRect.width;\n this.imageHeight = imgRect.height;\n\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n this.setState({\n minZoom: minZoom,\n maxZoom: minZoom * DEFAULT_MAX_ZOOM\n });\n\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n // Converting from viewport coordinates to container, then panning.\n const panX = this.cutoutRect.left - this.bBoxRect.left -\n (imgRect.width - this.cutoutRect.width) / 2;\n const panY = this.cutoutRect.top - this.bBoxRect.top -\n (imgRect.height - this.cutoutRect.height) / 2;\n\n this.positionAll(panX, panY, zoom);\n }\n\n onZoom(e) {\n this.handleZoom(e.target.value);\n }\n\n handleZoom(zoom) {\n let panX = this.state.panX;\n let panY = this.state.panY;\n\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n\n // Calculate image coordinates at the new zoom.\n const imgLeft = this.originX - (this.originX - panX) * zoom;\n const imgRight = imgLeft + this.imageWidth * zoom;\n const imgTop = this.originY - (this.originY - panY) * zoom;\n const imgBottom = imgTop + this.imageHeight * zoom;\n\n // Cutout in the same coordinates as the image.\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n const coRight = coLeft + this.cutoutRect.width;\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\n const coBottom = coTop + this.cutoutRect.height;\n\n if (coLeft < imgLeft) {\n panX -= (imgLeft - coLeft) / zoom;\n } else if (coRight > imgRight) {\n panX += (coRight - imgRight) / zoom;\n }\n\n if (coTop < imgTop) {\n panY -= (imgTop - coTop) / zoom;\n } else if (coBottom > imgBottom) {\n panY += (coBottom - imgBottom) /zoom;\n }\n\n this.positionAll(panX, panY, zoom);\n }\n\n mouseDown(e) {\n if (e.touches) {\n this.mouseX = e.touches[0].pageX;\n this.mouseY = e.touches[0].pageY;\n } else {\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\n window.addEventListener('touchend', this.mouseUp, { passive: true });\n // Disable text selection in the entire document.\n document.body.style['userSelect'] = 'none';\n }\n\n // Perform image panning.\n translate(pageX, pageY) {\n const dX = (pageX - this.mouseX) / this.state.zoom;\n const dY = (pageY - this.mouseY) / this.state.zoom;\n\n this.mouseX = pageX;\n this.mouseY = pageY;\n\n // Make sure the image is within the cutout window.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n // Check if the new position is within the boundaries, and if not if it's closer to them.\n const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n [this.cutoutRect.left, this.cutoutRect.right], dX);\n const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n this.positionAll(panX, panY, this.state.zoom);\n }\n\n // Image panning.\n mouseMove(e) {\n e.preventDefault();\n this.translate(e.pageX, e.pageY);\n }\n\n mouseTouch(e) {\n e.preventDefault();\n\n if (e.touches.length == 1) {\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\n return;\n }\n\n // Image zooming by pinching.\n const [touch0, touch1] = e.touches;\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n if (!this.prevDistance) {\n this.prevDistance = distance / this.state.zoom;\n }\n\n let scale = (distance / this.prevDistance);\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n }\n\n mouseUp(e) {\n window.removeEventListener('mousemove', this.mouseMove);\n window.removeEventListener('touchmove', this.mouseTouch);\n window.removeEventListener('mouseup', this.mouseUp);\n window.removeEventListener('touchend', this.mouseUp);\n // Re-enable text selection.\n document.body.style['userSelect'] = '';\n\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n }\n\n render() {\n // transform3d: position and scale.\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n // transformOrigin: zoom origin.\n const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n // Overlay position and size are exactly equal to the position and size of the transformed image\n // except it uses different coordinates.\n const overlay = {\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\n width: `${this.imageWidth * this.state.zoom}px`,\n height: `${this.imageHeight * this.state.zoom}px`\n };\n return (\n
\n
\n \"\"\n\n
\n
\n
\n
\n \n
\n
\n );\n }\n}\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Cropper from './cropper.jsx';\nimport { imageCrop } from '../lib/blob-helpers.js';\n\nexport default class AvatarCrop extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n scale: 1\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleChange = this.handleChange.bind(this);\n }\n\n // Cut out in image coordinates and desired scale factor.\n handleChange(left, top, width, height, scale) {\n this.setState({\n left: left,\n top: top,\n width: width,\n height: height,\n scale: scale\n });\n }\n\n handleSubmit() {\n imageCrop(this.props.mime, this.props.avatar,\n this.state.left, this.state.top, this.state.width, this.state.height,\n this.state.scale)\n .then(img => {\n this.props.onSubmit(img.mime, img.blob, img.width, img.height);\n })\n .catch(err => {\n this.props.onError(err);\n });\n }\n\n render() {\n return (\n
\n
\n \n
\n
\n {this.props.onCancel ?\n \n : null}\n \n
\n
\n );\n }\n};\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.25.2\";\n","import React from 'react';\n\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\n\n/* Contact's labels: [you], or icons [muted], [blocked] */\nexport default class ContactBadges extends React.PureComponent {\n render() {\n let badges = null;\n if (this.props.badges && this.props.badges.length > 0) {\n badges = [];\n this.props.badges.forEach(b => {\n const color = (b.color ? ' ' + b.color : '');\n if (b.icon) {\n badges.push({icon_mapping[b.icon] || b.icon});\n } else {\n badges.push({b.name});\n }\n });\n return <>{badges};\n }\n return null;\n }\n};\n","import React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst icon_mapping = {'staff': 'verified_user'};\n\nconst messages = defineMessages({\n badge_verified: {\n id: 'badge_verified',\n defaultMessage: 'Verified/official',\n description: 'Explanation of a verified account or topic badge'\n },\n badge_staff: {\n id: 'badge_staff',\n defaultMessage: 'Staff-managed',\n description: 'Explanation of a staff-managed account or topic badge'\n },\n badge_danger: {\n id: 'badge_danger',\n defaultMessage: 'Untrustworthy',\n description: 'Suspicious or untrustworthy account or topic badge'\n },\n});\n\n\n/* Trusted badges with labels: verified, staff, danger */\nclass BadgeList extends React.PureComponent {\n render() {\n const {formatMessage} = this.props.intl;\n let badges = null;\n if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {\n badges = [];\n this.props.trustedBadges.forEach(b => {\n const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);\n const style = 'material-icons ' + b + '-color';\n badges.push(
{icon_mapping[b] || b} {comment}
);\n });\n return <>{badges};\n }\n return null;\n }\n};\n\nexport default injectIntl(BadgeList);\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\n + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n return (this.props.show ?\n
: null);\n }\n}\n","import React from 'react';\n\n/* CheckBox: styled three-state checkbox, either clickable or static */\nexport default class CheckBox extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n handleChange() {\n this.props.onChange(this.props.name, !this.props.checked);\n }\n\n render() {\n let classList = ['material-icons'];\n let iconName;\n if (Array.isArray(this.props.className)) {\n classList.push(...this.props.className);\n } else if (this.props.className) {\n classList.push(this.props.className);\n }\n if (this.props.onChange) {\n if (this.props.checked) {\n classList.push('blue', 'clickable');\n iconName = 'check_box';\n } else if (this.props.checked === false) {\n classList.push('blue', 'clickable');\n iconName = 'check_box_outline_blank';\n } else {\n classList.push('lt-blue');\n iconName = 'indeterminate_check_box';\n }\n } else {\n if (this.props.checked) {\n iconName = 'check_box';\n } else {\n iconName = 'check_box_outline_blank';\n }\n }\n let attrs = {\n className: classList.join(' '),\n id: this.props.id,\n };\n if (this.props.onChange) {\n attrs.onClick = this.handleChange;\n }\n return React.createElement('i', attrs, iconName);\n }\n}\n","import React from 'react';\n\nimport MenuCancel from './menu-cancel.jsx';\n\nexport default class ErrorPanel extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n show: false,\n };\n\n this.hide = this.hide.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.level !== this.props.level) {\n this.setState({\n show: !(!this.props.level)\n });\n }\n }\n\n hide() {\n this.setState({show: false});\n if (this.props.onClearError) {\n this.props.onClearError();\n }\n }\n\n render() {\n const icons = {err: 'error', warn: 'warning', info: 'info'}\n const level = icons[this.props.level] || '';\n const className = 'info-box ' + level;\n return (\n
\n
{level}
\n \n {this.props.text}\n {this.props.action ?\n <>\n   {e.preventDefault(); this.props.action();}}>\n {this.props.actionText}\n \n \n : null}\n \n
\n
\n );\n }\n};\n","// In-place text editor. Shows text with an icon which toggles it into an input field.\nimport React from 'react';\n\nimport VisiblePassword from './visible-password.jsx';\n\nexport default class InPlaceEdit extends React.Component {\n constructor(props) {\n super(props);\n\n this.selfRef = React.createRef();\n\n this.state = {\n active: props.active,\n initialValue: props.value || '',\n value: props.value || '',\n valid: true\n };\n\n this.handeTextChange = this.handeTextChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleStartEditing = this.handleStartEditing.bind(this);\n this.handleEditingFinished = this.handleEditingFinished.bind(this);\n this.handlePasswordFinished = this.handlePasswordFinished.bind(this);\n }\n\n componentDidUpdate(prevProps, prevState) {\n // If text has changed while in read mode, update text and discard changes.\n // Ignore update if in edit mode.\n const newValue = this.props.value || '';\n if (prevState.initialValue != newValue && !prevState.active) {\n this.setState({\n initialValue: newValue,\n value: newValue\n });\n }\n }\n\n handeTextChange(e) {\n this.setState({value: e.target.value || ''});\n if (this.props.validator) {\n Promise.resolve(this.props.validator(e.target.value))\n .then(valid => {\n this.setState({valid: valid});\n })\n .catch(err => {\n // If it's interrupted, then the err is undefined. Ignore it.\n if (err) {\n this.setState({valid: false});\n }\n });\n }\n }\n\n handleKeyDown(e) {\n if (e.keyCode === 27) {\n // Escape pressed\n this.setState({value: this.props.value, active: false});\n } else if (e.keyCode === 13) {\n // Enter pressed\n this.handleEditingFinished(e);\n }\n }\n\n handleStartEditing() {\n if (!this.props.readOnly) {\n this.setState({active: true}, _ => {\n if (this.selfRef.current) {\n this.selfRef.current.focus();\n }\n });\n }\n }\n\n handleEditingFinished(event) {\n const value = this.state.value.trim();\n if (this.props.required && (!event.target.checkValidity() || !value)) {\n // Empty input\n this.setState({value: this.props.value, active: false});\n return;\n }\n this.setState({active: false});\n if ((value || this.props.value) && (value !== this.props.value) && this.state.valid) {\n this.props.onFinished(value);\n }\n }\n\n handlePasswordFinished(value) {\n this.setState({active: false});\n if (value && (value !== this.props.value)) {\n this.props.onFinished(value);\n }\n }\n\n render() {\n if (!this.state.active) {\n let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;\n let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');\n if (!spanText) {\n spanText = this.props.placeholder;\n spanClass += ' placeholder';\n }\n if (!this.props.multiline || this.props.multiline == 1) {\n spanClass += ' short';\n }\n\n return (\n {this.props.iconLeft && {this.props.iconLeft}}\n {spanText}\n {this.props.iconRight && {this.props.iconRight}}\n );\n }\n\n let element;\n const attr = {};\n if (this.props.type == 'password') {\n element = VisiblePassword;\n attr.onFinished = this.handlePasswordFinished;\n } else {\n if (this.props.multiline > 1) {\n element = 'textarea';\n attr.rows = this.props.multiline;\n attr.className = 'in-place-edit';\n } else {\n element = 'input';\n attr.type = this.props.type || 'text';\n attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left'\n : this.props.iconRight ? ' with-icon-right' : '');\n if (this.props.maxLength) {\n attr.maxLength=this.props.maxLength;\n }\n }\n attr.value = this.state.value;\n attr.className += this.state.valid ? '' : ' invalid';\n attr.ref = this.selfRef;\n attr.onChange = this.handeTextChange;\n attr.onKeyDown = this.handleKeyDown;\n attr.onBlur = this.handleEditingFinished;\n }\n attr.placeholder = this.props.placeholder;\n attr.required = this.props.required ? 'required' : '';\n attr.autoComplete = this.props.autoComplete;\n attr.autoFocus = true;\n if (this.props.spellCheck !== undefined) {\n attr.spellCheck = this.props.spellCheck ? 'true' : 'false';\n }\n\n if (this.props.iconLeft || this.props.iconRight) {\n return (\n <>\n {this.props.iconLeft && {this.props.iconLeft}}\n {React.createElement(element, attr, null)}\n {this.props.iconRight && {this.props.iconRight}}\n \n );\n }\n return React.createElement(element, attr, null);\n }\n};\n","module.exports = React;","// TagManager: edit topic or user tags.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TagManager extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tags: this.props.tags || [],\n alias: Tinode.tagByPrefix(this.props.tags, Tinode.TAG_ALIAS) || '',\n tagInput: '',\n activated: this.props.activated\n };\n\n this.handleTagInput = this.handleTagInput.bind(this);\n this.handleAddTag = this.handleAddTag.bind(this);\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const tags = nextProps.tags || [];\n if (!arrayEqual(tags, prevState.tags) && !prevState.activated) {\n return {\n tags: tags || [],\n alias: Tinode.tagByPrefix(tags, Tinode.TAG_ALIAS) || '',\n };\n }\n return null;\n }\n\n handleTagInput(text) {\n this.setState({tagInput: text});\n if (text.length > 0) {\n const last = text[text.length-1];\n if (text[0] == '\"') {\n // This is a quoted string.\n if (text.length > 1 && last == '\"') {\n this.handleAddTag(text.substring(1, text.length-1));\n }\n } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n // User entered ',', ' ' or ';'\n this.handleAddTag(text.substring(0, text.length-1).trim());\n }\n }\n }\n\n handleAddTag(tag) {\n const maxTagCount = this.props.tinode.getServerParam(Tinode.MAX_TAG_COUNT, MAX_TAG_COUNT);\n\n if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n const tags = this.state.tags.slice(0);\n tags.push(tag);\n\n this.setState({tags: tags, tagInput: ''});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n return tags;\n }\n return this.state.tags;\n }\n\n handleRemoveTag(tag, index) {\n const tags = this.state.tags.slice(0);\n tags.splice(index, 1);\n this.setState({tags: tags});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n }\n\n handleSubmit() {\n // Add unprocessed input to tags.\n let tags = this.handleAddTag(this.state.tagInput.trim());\n // Add back the alias (and overwrite one possibly added by hand).\n tags = Tinode.setUniqueTag(tags, this.state.alias);\n // Submit the updated list.\n this.props.onSubmit(tags);\n this.setState({activated: false, tags: this.props.tags || []});\n }\n\n handleCancel() {\n this.setState({activated: false, tagInput: '', tags: this.props.tags || []});\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n render() {\n const minTagLength = this.props.tinode.getServerParam(Tinode.MIN_TAG_LENGTH, MIN_TAG_LENGTH);\n const maxTagLength = this.props.tinode.getServerParam(Tinode.MAX_TAG_LENGTH, MAX_TAG_LENGTH);\n\n let tags = [];\n if (this.state.activated) {\n this.state.tags.forEach(tag => {\n if (tag != this.state.alias) {\n tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\n }\n });\n\n } else {\n this.state.tags.forEach(tag => {\n if (tag != this.state.alias) {\n tags.push({tag});\n }\n });\n if (tags.length == 0) {\n tags = (\n \n \n \n );\n }\n }\n return (\n
\n
\n \n
\n {this.state.activated ?\n
\n {\n (add_tags_prompt) => \n }\n {this.props.onSubmit || this.props.onCancel ?\n
\n \n \n
\n : null}\n
\n :\n \n }\n
\n );\n }\n};\n","// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\nimport { WALLPAPER_DEFAULTS } from '../config.js';\n\n// Make shortcut icon appear with a green dot + show unread count in title.\nexport function updateFavicon(count) {\n const oldIcon = document.getElementById('shortcut-icon');\n const head = document.head || document.getElementsByTagName('head')[0];\n const newIcon = document.createElement('link');\n newIcon.type = 'image/png';\n newIcon.id = 'shortcut-icon';\n newIcon.rel = 'shortcut icon';\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\n if (oldIcon) {\n head.removeChild(oldIcon);\n }\n head.appendChild(newIcon);\n\n document.title = (count > 0 ? '('+count+') ' : '') + 'Tinode';\n}\n\n// Create theCard which represents user's or topic's \"public\" info.\nexport function theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : Tinode.DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: Tinode.DEL_CHAR\n };\n } else {\n card.photo = {\n data: Tinode.DEL_CHAR,\n ref: imageUrl\n };\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n }\n\n return card;\n}\n\n// Deep-shallow compare two arrays: shallow compare each element.\nexport function arrayEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!Array.isArray(a) || !Array.isArray(b)) {\n return false;\n }\n\n // Compare lengths first.\n if (a.length != b.length) {\n return false;\n }\n // Order of elements is ignored.\n a.sort();\n b.sort();\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n// Checks (loosely) if the given string is a phone. If so, returns the phone number in a format\n// as close to E.164 as possible.\nexport function asPhone(val) {\n val = val.trim();\n if (/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(val)) {\n return val.replaceAll(/[- ().]*/g, '');\n }\n return null;\n}\n\n// Checks (loosely) if the given string is an email. If so returns the email.\nexport function asEmail(val) {\n val = val.trim();\n if (/^[a-z0-9_.+-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.test(val)) {\n return val;\n }\n return null;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// //example.com or \\\\example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n // Replacing backslashes with forward slashes to mimic JS URL parser then testing for\n // 'scheme:' and '//' with optional space at the start.\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url.replace(/\\\\/g, '/'));\n}\n\n// Ensure URL does not present an XSS risk. Optional allowedSchemes may contain an array of\n// strings with permitted URL schemes, such as ['ftp', 'ftps']; otherwise accept http and https only.\nexport function sanitizeUrl(url, allowedSchemes) {\n if (typeof url != 'string') {\n return url;\n }\n\n // Strip control characters and whitespace. They are not valid URL characters anyway.\n url = url.replace(/[^\\x21-\\x7E]/gmi, '').trim();\n\n // Replace backslashes with forward slashes. They will be replaced in the URL parser anyway.\n url = url.replace(/\\\\/g, '/');\n\n // Relative URLs are safe.\n // Relative URL does not start with ':', abcd123: or '//'.\n if (!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url)) {\n return url;\n }\n\n // Blob URLs are safe.\n if (/^blob:http/.test(url)) {\n return url;\n }\n\n // Absolute URL. Accept only safe schemes, or no scheme.\n const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';\n const re = new RegExp('^((' + schemes + '):|//)', 'i');\n if (!re.test(url)) {\n return null;\n }\n\n return url;\n}\n\n// Ensure URL is suitable as a source like field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[-+.a-z0-9]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\nexport function defaultWallpaper() {\n const wallpaperIndex = require('../../img/bkg/index.json');\n const wp = wallpaperIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index];\n return {name: `../${WALLPAPER_DEFAULTS.path}${wp.name}`, size: wp.size};\n}\n\nexport function wallpaperNameFromUrl(wallpaperUrl) {\n // Get filename from URL.\n const parts = wallpaperUrl.split('/');\n return parts[parts.length - 1];\n}\n\nexport function wallpaperTypeFromUrl(wallpaperUrl) {\n // Get filename from URL.\n const fname = wallpaperNameFromUrl(wallpaperUrl);\n const wallpaperIndex = require('../../img/bkg/index.json');\n for (const type in wallpaperIndex) {\n for (let i = 0; i < wallpaperIndex[type].length; i++) {\n if (wallpaperIndex[type][i].name == fname) {\n return type;\n }\n }\n }\n return null;\n}\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n\n","// The X menu to be displayed in title bars.\nimport React from 'react';\n\nexport default class MenuCancel extends React.PureComponent {\n render() {\n return (\n {e.preventDefault(); this.props.onCancel();}}>\n close\n \n );\n }\n}\n","// A panel included into a list of contacts with an action text.\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nclass ContactAction extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.onAction(this.props.action);\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n return (\n
  • \n
    {formatMessage(this.props.title, this.props.values)}
    \n
  • \n );\n }\n};\n\nexport default injectIntl(ContactAction);\n","// ContactList: component for showing a list of contacts,\n// such as a list of group members in a group chat.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode } from 'tinode-sdk';\n\nimport Contact from './contact.jsx';\nimport ContactAction from './contact-action.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nimport { MESSAGE_PREVIEW_LENGTH } from '../config.js';\n\nconst messages = defineMessages({\n badge_you: {\n id: 'badge_you',\n defaultMessage: 'you',\n description: 'Badge for indicating the current user'\n },\n badge_owner: {\n id: 'badge_owner',\n defaultMessage: 'owner',\n description: 'Badge for indicating the owner'\n }\n});\n\nclass ContactList extends React.Component {\n render() {\n const { formatMessage } = this.props.intl;\n const showCheckmark = Array.isArray(this.props.topicSelected);\n const contactNodes = [];\n\n // Count of contacts, excluding action items.\n let contactsCount = 0;\n if (this.props.showSelfTopic) {\n const selected = showCheckmark ?\n (this.props.topicSelected.indexOf('slf') > -1) :\n (this.props.topicSelected === 'slf');\n contactNodes.push(\n \n );\n contactsCount ++;\n }\n if (this.props.contacts && this.props.contacts.length > 0) {\n this.props.contacts.forEach(c => {\n if (c.action) {\n // Action item\n contactNodes.push(\n );\n } else {\n // Normal contact\n const key = this.props.showMode ? c.user : (c.topic || c.user);\n // If filter function is provided, filter out the items\n // which don't satisfy the condition.\n if (this.props.filterFunc && this.props.filter) {\n const filterOn = [key];\n if (c.private && c.private.comment) {\n filterOn.push(('' + c.private.comment).toLowerCase());\n }\n if (c.public && c.public.fn) {\n filterOn.push(('' + c.public.fn).toLowerCase());\n }\n if (!this.props.filterFunc(this.props.filter, filterOn)) {\n return;\n }\n }\n\n const isChannel = Tinode.isChannelTopicName(key);\n const isGroup = !isChannel && Tinode.isGroupTopicName(key);\n const selected = showCheckmark ?\n (this.props.topicSelected.indexOf(key) > -1) :\n (this.props.topicSelected === key);\n const badges = [];\n if (this.props.showMode) {\n if (key == this.props.myUserId) {\n badges.push({name: formatMessage(messages.badge_you), color: 'green'});\n }\n if (c.acs && c.acs.isOwner()) {\n badges.push({name: formatMessage(messages.badge_owner), color: 'blue'});\n }\n }\n\n const comment = Array.isArray(c.private) ?\n c.private.join(',') : (c.private ? c.private.comment : null);\n let preview;\n let forwarded;\n let previewIsResponse;\n let deliveryStatus;\n if (!this.props.showMode && c.latestMessage) {\n const msg = c.latestMessage();\n if (msg) {\n forwarded = msg.head ? msg.head.forwarded : null;\n deliveryStatus = msg._status || c.msgStatus(msg, true);\n previewIsResponse = msg.from != this.props.myUserId;\n if (msg.content) {\n preview = typeof msg.content == 'string' ?\n msg.content.substr(0, MESSAGE_PREVIEW_LENGTH) :\n Drafty.preview(msg.content, MESSAGE_PREVIEW_LENGTH);\n }\n }\n }\n\n contactNodes.push(\n \n );\n contactsCount ++;\n }\n }, this);\n }\n\n return (\n
    \n {contactsCount == 0 ?\n
    \n :\n null\n }\n {contactNodes.length > 0 ?\n
      \n {contactNodes}\n
    \n :\n null\n }\n
    \n );\n }\n};\n\nexport default injectIntl(ContactList);\n","module.exports = tinode;","// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat';\nimport { base64ToIntArray } from '../lib/blob-helpers';\n\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Color of histogram bars.\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#1781d7'; // average between dark and light accent colors.\n// Minimum number of amplitude bars to draw.\nconst MIN_PREVIEW_LENGTH = 16;\n\nconst messages = defineMessages({\n icon_title_play: {\n id: 'icon_title_play',\n defaultMessage: 'Play recording',\n description: 'Icon tool tip for starting audio playback'\n }\n});\n\nclass AudioPlayer extends React.PureComponent {\n constructor(props) {\n super(props);\n\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n\n this.state = {\n canPlay: false,\n playing: false,\n currentTime: '0:00',\n duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\n longMin: this.props.duration >= 600000,\n preview: preview\n };\n\n this.initAudio = this.initAudio.bind(this);\n this.initCanvas = this.initCanvas.bind(this);\n this.resampleBars = this.resampleBars.bind(this);\n this.visualize = this.visualize.bind(this);\n\n this.handlePlay = this.handlePlay.bind(this);\n this.handleSeek = this.handleSeek.bind(this);\n this.handleError = this.handleError.bind(this);\n\n this.audioPlayer = null;\n\n this.viewBuffer = [];\n this.canvasRef = React.createRef();\n }\n\n componentDidMount() {\n if (this.props.src) {\n this.initAudio();\n }\n\n this.initCanvas();\n }\n\n componentWillUnmount() {\n if (this.audioPlayer) {\n this.audioPlayer.onloadedmetadata = null;\n this.audioPlayer.ontimeupdate = null;\n this.audioPlayer.onended = null;\n this.audioPlayer.pause();\n this.audioPlayer = null;\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.src != prevProps.src) {\n this.initAudio();\n }\n\n if (this.props.preview != prevProps.preview) {\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n this.setState({preview: preview}, this.initCanvas);\n }\n }\n\n initAudio() {\n this.audioPlayer = new Audio(this.props.src);\n this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\n this.audioPlayer.ontimeupdate = _ => this.setState({\n currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\n });\n this.audioPlayer.onended = _ => {\n this.audioPlayer.currentTime = 0;\n this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\n }\n }\n\n initCanvas() {\n // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\n this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n this.canvasContext = this.canvasRef.current.getContext('2d');\n this.canvasContext.lineCap = 'round';\n\n this.viewBuffer = this.resampleBars(this.state.preview);\n this.visualize();\n }\n\n // Draw amplitude of sound.\n visualize() {\n if (!this.canvasRef.current) {\n return;\n }\n\n const width = this.effectiveWidth;\n const height = this.canvasRef.current.height;\n\n this.canvasContext.lineWidth = LINE_WIDTH;\n\n const drawFrame = _ => {\n if (!this.canvasRef.current || !this.audioPlayer) {\n // The component is unmounted.\n return;\n }\n\n this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n\n if (this.viewBuffer) {\n if (this.state.playing) {\n window.requestAnimationFrame(drawFrame);\n }\n\n // Current playback position.\n const thumbAt = this.props.duration ?\n Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n\n // Draw amplitude bars.\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n for (let i = 0; i < this.viewBuffer.length; i++) {\n let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n\n const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n if (this.canvasContext.strokeStyle != color) {\n this.canvasContext.stroke();\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = color;\n }\n\n this.canvasContext.moveTo(x, (height - y) * 0.5);\n this.canvasContext.lineTo(x, (height + y) * 0.5);\n }\n // Actually draw the bars on canvas.\n this.canvasContext.stroke();\n\n // Draw thumb.\n if (this.props.duration) {\n this.canvasContext.beginPath();\n this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n this.canvasContext.fillStyle = THUMB_COLOR;\n this.canvasContext.fill();\n }\n }\n }\n\n drawFrame();\n }\n\n // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\n resampleBars(original) {\n const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\n // Remove extra padding on the right due to fractional bar which is not drawn.\n this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n\n if (!Array.isArray(original) || original.length == 0) {\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n const factor = original.length / dstCount;\n let amps = [];\n let maxAmp = -1;\n for (let i=0; i 0) {\n return amps.map(a => a / maxAmp);\n }\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n handlePlay(e) {\n e.preventDefault();\n if (!this.state.canPlay) {\n return;\n }\n\n if (this.state.playing) {\n this.audioPlayer.pause();\n this.setState({playing: false});\n } else if (this.audioPlayer.readyState >= 2) {\n this.audioPlayer.play();\n this.setState({playing: true}, this.visualize);\n }\n }\n\n handleError(err) {\n console.error(err);\n }\n\n handleSeek(e) {\n e.preventDefault();\n if (e.target && this.props.duration) {\n const rect = e.target.getBoundingClientRect();\n const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;\n this.audioPlayer.currentTime = this.props.duration * offset / 1000;\n this.setState({currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)});\n if (!this.state.playing) {\n this.visualize();\n }\n }\n }\n\n render() {\n const playClass = 'material-icons' +\n (this.props.short ? '' : ' large') +\n (this.state.canPlay ? '' : ' disabled');\n const play = (\n {this.state.playing ? 'pause_circle' :\n (this.state.canPlay ? 'play_circle' : 'not_interested')}\n );\n return (
    {this.props.short ?\n <>\n \n {play}\n \n :\n <>\n {play}\n
    \n \n
    {this.state.currentTime}/{this.state.duration}
    \n
    \n \n }\n
    );\n }\n}\n\nexport default injectIntl(AudioPlayer);\n","module.exports = ReactDOM;","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// Chat message describing a video or voice call.\n\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\nexport default class CallMessage extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n const callIcon = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n const title = this.props.incoming ?\n :\n ;\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration = ;\n break;\n case 'declined':\n duration = ;\n break;\n case 'missed':\n duration = this.props.incoming ?\n :\n ;\n break;\n default:\n duration = ;\n break;\n }\n } else {\n duration = {secondsToTime(this.props.duration / 1000)};\n }\n return
    \n
    call
    \n
    \n
    {title}
    \n
    {callIcon} {duration}
    \n
    \n
    ;\n }\n}\n","// The counter of unread messages in the topic.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\n// Props:\n// incoming: true | false.\n// callState: 'busy' | 'declined' | 'disconnected' | 'missed'.\n// duration: (call duration in milliseconds).\nexport default class CallStatus extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const icon2 = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration = ;\n break;\n case 'declined':\n duration = ;\n break;\n case 'missed':\n duration = this.props.incoming ?\n :\n ;\n break;\n default:\n duration = ;\n break;\n }\n } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {\n duration = \n } else {\n duration = {secondsToTime(this.props.duration / 1000)};\n }\n return (\n <>\n
    \n call{icon2}\n
    {duration}\n \n );\n }\n};\n","// Element which shows static video preview:\n// an image with duration and a play button in the middle.\n\nimport React from 'react';\n\nimport { secondsToTime } from '../lib/strformat.js'\n\nexport default class InlineVideo extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.videoRef = React.createRef();\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(e) {\n if (this.props.onClick) {\n // the click target has to be the image element.\n this.props.onClick(e);\n }\n }\n\n render() {\n const duration = secondsToTime(this.props['data-duration'] / 1000);\n const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');\n return (\n
    \n {React.createElement('img', this.props)}\n
    \n {this.props.onClick ?\n play_arrow\n :\n }\n
    \n {duration ?
    {duration}
    : null}\n
    \n );\n }\n};\n","// Image with a placeholder which is replaced when the promise is resolved.\nimport React from 'react';\n\nexport default class LazyImage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\n style: Object.assign({padding: '4px'}, this.props.style),\n className: this.props.className,\n alt: this.props.alt,\n onClick: this.props.onClick,\n };\n }\n\n componentDidMount() {\n // whenDone is a wrapper around an actual promise to be able to cancel it.\n this.props.whenDone\n .promise\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n }\n\n componentWillUnmount() {\n this.props.whenDone.cancel();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.whenDone != this.props.whenDone) {\n this.setState({src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png', style: {...this.state.style, padding: '4px'}});\n this.props.whenDone\n .promise\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n }\n }\n\n render() {\n return React.createElement('img', this.state);\n }\n};\n","import React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport { TheCard } from 'tinode-sdk';\n\nimport LetterTile from './letter-tile.jsx';\n\nconst messages = defineMessages({\n unknown_name: {\n id: 'unknown_name',\n defaultMessage: 'Unknown',\n description: 'Name to show when the name is missing'\n }\n});\n\nclass TheCardMini extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleDownload = this.handleDownload.bind(this);\n this.handleMessage = this.handleMessage.bind(this);\n }\n\n handleDownload(e) {\n e.preventDefault();\n try {\n const vcard = TheCard.exportVCard(this.props.content);\n const blob = new Blob([vcard], { type: 'text/vcard' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.style.display = 'none';\n a.href = url;\n a.download = (this.props.content.fn || 'contact') + '.vcf';\n document.body.appendChild(a);\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n } catch (err) {\n console.error(\"Failed to download vcard\", err);\n if (this.props.onError) {\n this.props.onError(\"Failed to download vcard\", 'err');\n }\n }\n }\n\n handleMessage(e) {\n // This is handled by the parent component via props.onAction which expects a click event.\n }\n\n render() {\n const card = this.props.content;\n if (!card) {\n return null;\n }\n\n const uid = TheCard.getFirstTinodeID(card);\n const contacts = TheCard.getEmails(card).concat(TheCard.getPhones(card));\n const org = TheCard.getOrg(card);\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    {card.fn || }
    \n {org &&
    {org}
    }\n
    \n
    \n
    \n {uid ?\n <>\n \n \n \n
    \n \n : contacts.length > 0 ?\n <>\n \n \n \n
    \n \n : null\n }\n \n \n \n
    \n
    \n );\n }\n};\n\nexport default injectIntl(TheCardMini);\n","// Image view with progress bar and a cancel button.\nimport React from 'react';\n\nimport FileProgress from './file-progress.jsx';\n\nexport default class UploadingImage extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n
    \n {React.createElement('img', this.props)}\n
    \n \n
    \n
    \n );\n }\n};\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty, TheCard } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx';\nimport TheCardMini from '../widgets/the-card-mini.jsx';\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO,\n REM_SIZE, VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onHandleClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = (e) => this.onHandleClick(e, 'form_button');\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'LN':\n if (attr) {\n // Ensure only safe URL schemes are clickable.\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n }\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = (e) => this.onHandleClick(e, 'quote');\n break;\n case 'TC':\n // TheCard\n el = TheCardMini;\n attr.content = data;\n attr.authorizeURL = this.authorizeURL;\n attr.onChatClick = (e) => this.onHandleClick(e, 'contact_chat');\n attr.onFindClick = (e) => this.onHandleClick(e, 'contact_find');\n values = null;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = (e) => this.onHandleClick(e, 'image');\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of or
    }>\n \n \n :\n null\n }\n
    \n );\n }\n};\n\nexport default injectIntl(TinodeWeb);\n","// Put all packages together.\n// Used to generate umd/index.prod.js\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { IntlProvider } from 'react-intl';\n\nimport TinodeWeb from './views/tinode-web.jsx';\nimport HashNavigation from './lib/navigation.js';\n\n// Insert google analytics script and tag if configured.\nif (typeof FIREBASE_INIT != 'undefined' && FIREBASE_INIT && FIREBASE_INIT.measurementId) {\n const head = document.getElementsByTagName('head')[0];\n let script = document.createElement('script');\n script.src = 'https://www.googletagmanager.com/gtag/js?id=' + FIREBASE_INIT.measurementId;\n script.async = true;\n head.prepend(script);\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', FIREBASE_INIT.measurementId);\n}\n\n// Allow loading translation strings for just one language.\nconst messageLoader = {\n 'ar': _ => import('./i18n.min/ar.json'),\n 'de': _ => import('./i18n.min/de.json'),\n 'en': _ => import('./i18n.min/en.json'),\n 'es': _ => import('./i18n.min/es.json'),\n 'fr': _ => import('./i18n.min/fr.json'),\n 'it': _ => import('./i18n.min/it.json'),\n 'ko': _ => import('./i18n.min/ko.json'),\n 'ro': _ => import('./i18n.min/ro.json'),\n 'ru': _ => import('./i18n.min/ru.json'),\n 'th': _ => import('./i18n.min/th.json'),\n 'uk': _ => import('./i18n.min/uk.json'),\n 'zh': _ => import('./i18n.min/zh.json'),\n 'zh-TW': _ => import('./i18n.min/zh-TW.json')\n};\n\n// List of languages that are written right-to-left.\nconst rtl = ['ar', 'fa', 'he', 'ur'];\n\n// Detect human language to use in the UI:\n// Check parameters from URL hash #?hl=ru, then browser, then use 'en' as a fallback.\nconst { params } = HashNavigation.parseUrlHash(window.location.hash);\nconst language = (params && params.hl) ||\n (navigator.languages && navigator.languages[0]) ||\n navigator.language ||\n navigator.userLanguage ||\n 'en';\n\n// Make sure names like 'en_GB' and 'en-GB' consistently use '-'.\nconst normalized = language.replace('_', '-');\n// Get the base language 'en' from a more specific 'en-US' as a partial fallback.\nconst baseLanguage = normalized.split('-')[0].toLowerCase();\n\n// Try the full locale first, then the locale without the region code, fallback to 'en'.\nconst htmlLang = messageLoader[normalized] ? language : messageLoader[baseLanguage] ? baseLanguage : 'en';\n\nconst html = document.getElementsByTagName('html')[0];\n// Set lang attribute of the HTML element: \nhtml.setAttribute('lang', htmlLang);\nif (rtl.includes(baseLanguage)) {\n // Set right-to-left dir attribute of the HTML element: \n html.setAttribute('dir', 'rtl');\n}\n// Render the app.\nconst root = createRoot(document.getElementById('mountPoint'));\nmessageLoader[htmlLang]().then(messages =>\n root.render(\n \n \n \n));\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","Cropper","React","constructor","props","super","this","state","panX","panY","originX","originY","zoom","minZoom","maxZoom","overlay","cutout","preview","boundingBox","imageWidth","imageHeight","mouseX","mouseY","prevDistance","cutoutRect","bBoxRect","initScaling","bind","onZoom","handleZoom","mouseDown","mouseUp","mouseMove","mouseTouch","positionAll","translate","componentDidMount","current","addEventListener","passive","getBoundingClientRect","width","height","componentWillUnmount","removeEventListener","setState","left","top","onChange","checkBound","currPan","img","delta","nextDiff","Math","min","imgRect","max","e","target","value","imgLeft","imgRight","imgTop","imgBottom","coLeft","coRight","coTop","coBottom","touches","pageX","pageY","window","document","body","style","dX","dY","right","bottom","preventDefault","length","touch0","touch1","distance","sqrt","scale","render","t3d","orig","className","ref","src","source","alt","transform","transformOrigin","onLoad","type","step","AvatarCrop","handleSubmit","handleChange","imageCrop","mime","avatar","then","onSubmit","blob","catch","err","onError","onCancel","onClick","FormattedMessage","id","defaultMessage","PACKAGE_VERSION","icon_mapping","ContactBadges","badges","forEach","b","color","icon","push","key","name","messages","defineMessages","badge_verified","badge_staff","badge_danger","BadgeList","formatMessage","intl","trustedBadges","comment","short","injectIntl","LoadSpinner","large","clear","centered","show","CheckBox","checked","iconName","classList","Array","isArray","attrs","join","ErrorPanel","hide","componentDidUpdate","prevProps","level","onClearError","warn","info","text","action","href","whiteSpace","actionText","MenuCancel","InPlaceEdit","selfRef","active","initialValue","valid","handeTextChange","handleKeyDown","handleStartEditing","handleEditingFinished","handlePasswordFinished","prevState","newValue","validator","Promise","resolve","keyCode","readOnly","_","focus","event","trim","required","checkValidity","onFinished","spanText","spanClass","placeholder","multiline","iconLeft","iconRight","element","attr","VisiblePassword","rows","maxLength","onKeyDown","onBlur","autoComplete","autoFocus","undefined","spellCheck","module","exports","TagManager","tags","alias","Tinode","tagByPrefix","TAG_ALIAS","tagInput","activated","handleTagInput","handleAddTag","handleRemoveTag","handleCancel","getDerivedStateFromProps","nextProps","arrayEqual","last","substring","tag","maxTagCount","tinode","getServerParam","MAX_TAG_COUNT","slice","onTagsChanged","index","splice","setUniqueTag","minTagLength","MIN_TAG_LENGTH","maxTagLength","MAX_TAG_LENGTH","user","invalid","title","add_tags_prompt","ChipInput","chips","avatarDisabled","prompt","tabIndex","onEnter","onFocusLost","onChipRemoved","filterFunc","updateFavicon","count","oldIcon","getElementById","head","getElementsByTagName","newIcon","createElement","rel","removeChild","appendChild","theCard","fn","imageUrl","imageMimeType","note","card","DEL_CHAR","mimeType","matches","exec","photo","data","indexOf","a","sort","i","l","asPhone","val","test","replaceAll","asEmail","isUrlRelative","url","replace","sanitizeUrl","allowedSchemes","schemes","RegExp","sanitizeUrlForMime","mimeMajor","sanitizedUrl","urlAsAttachment","startsWith","query","fragment","idxF","idxQ","params","URLSearchParams","append","toString","deliveryMarker","received","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","cancelablePromise","promise","hasCanceled","Error","reject","result","isCanceled","error","cancel","defaultWallpaper","wp","require","WALLPAPER_DEFAULTS","path","size","wallpaperNameFromUrl","wallpaperUrl","parts","split","wallpaperTypeFromUrl","fname","wallpaperIndex","CALL_STATE_NONE","CALL_STATE_OUTGOING_INITATED","CALL_STATE_INCOMING_RECEIVED","CALL_STATE_IN_PROGRESS","CALL_HEAD_STARTED","ContactAction","handleClick","stopPropagation","onAction","values","badge_you","badge_owner","ContactList","showCheckmark","topicSelected","contactNodes","contactsCount","showSelfTopic","selected","Contact","showMode","onSelected","onTopicSelected","showContextMenu","item","contacts","c","topic","filter","filterOn","private","toLowerCase","public","isChannel","isChannelTopicName","isGroup","isGroupTopicName","myUserId","acs","isOwner","forwarded","previewIsResponse","deliveryStatus","latestMessage","msg","_status","msgStatus","from","content","substr","MESSAGE_PREVIEW_LENGTH","Drafty","makeImageUrl","unread","showUnread","now","online","connected","pinned","showOnline","isVerified","trusted","verified","isStaff","staff","isDangerous","danger","deleted","_deleted","noScroll","dangerouslySetInnerHTML","__html","emptyListMessage","BAR_COLOR_DARK","icon_title_play","AudioPlayer","base64ToIntArray","canPlay","playing","currentTime","duration","secondsToTime","longMin","initAudio","initCanvas","resampleBars","visualize","handlePlay","handleSeek","handleError","audioPlayer","viewBuffer","canvasRef","onloadedmetadata","ontimeupdate","onended","pause","Audio","offsetWidth","offsetHeight","canvasContext","getContext","lineCap","effectiveWidth","lineWidth","drawFrame","clearRect","requestAnimationFrame","thumbAt","LINE_WIDTH","beginPath","strokeStyle","x","y","stroke","moveTo","lineTo","arc","PI","fillStyle","fill","original","dstCount","apply","map","factor","amps","maxAmp","lo","hi","amp","j","readyState","play","console","rect","offset","clientX","playClass","ReactDOM","m","createRoot","hydrateRoot","CallMessage","isCallDropped","includes","callState","successClass","callIcon","incoming","CallStatus","icon2","InlineVideo","videoRef","LazyImage","isvideo","Object","assign","padding","whenDone","unknown_name","TheCardMini","handleDownload","handleMessage","vcard","TheCard","exportVCard","Blob","URL","createObjectURL","display","download","click","revokeObjectURL","uid","getFirstTinodeID","getEmails","concat","getPhones","org","getOrg","LetterTile","authorizeURL","getPhotoUrl","onChatClick","onFindClick","UploadingImage","FileProgress","progress","onCancelUpload","drafty_form","drafty_attachment","drafty_image","drafty_video","drafty_unknown","fullFormatter","stack","quoteFormatter","call","el","tagName","attrValue","loading","handleImageData","onHandleClick","inner","child","CLICKABLE_URL_SCHEMES","idToColorClass","handleVideoData","IMAGE_THUMBNAIL_DIM","dim","fitImageSize","viewportWidth","REM_SIZE","dstWidth","BROKEN_IMAGE_SIZE","dstHeight","minWidth","minHeight","isProcessing","NO_DIMENSIONS_VIDEO","previewFormatter","isFormResponseType","getFn","inlineImageAttr","maxWidth","maxHeight","inlineVideoAttr","VIDEO_THUMBNAIL_WIDTH","shortenFileName","quoteImageOrVideo","isVideo","bits","premime","preref","base64ToBlob","fetch","evt","ok","status","statusText","imageScaled","scaled","blobToBase64","b64","replyFormatter","loadedPromise","message","Chip","noAvatar","deriveStateFromProps","input","focused","handleTextInput","removeChipAt","handleChipCancel","handleFocusGained","handleFocusLost","sortedChips","sortChips","staticMembers","chipIndex","indexChips","keep","normal","idx","removed","at","onFocus","UnreadBadge","self_topic_name","self_topic_comment","handleContextClick","topicName","topicTitle","self","isSelfTopicName","truncateString","icon_badges","getMode","isMuted","isJoiner","isValid","format","marker","titleClass","bgColor","small","SUPPORTED_IMAGE_FORMATS","MIME_EXTENSIONS","forceSquare","srcWidth","srcHeight","xoffset","yoffset","fileNameForMime","ext","lastIndexOf","fileOrBlob","maxSize","Image","crossOrigin","onerror","onload","async","canvas","ctx","imageSmoothingEnabled","drawImage","toBlob","objURL","fileToBase64","file","reader","FileReader","readAsDataURL","filePasted","onImageSuccess","onAttachmentSuccess","items","clipboardData","originalEvent","kind","getAsFile","base64ReEncode","str","btoa","atob","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","intArrayToBase64","String","fromCharCode","importVCard","readAsText","inputRef","visible","handleVisibility","currentTarget","setTimeout","contains","activeElement","SELF_AVATAR_URI","iconColor","letter","charAt","HashNavigation","parseUrlHash","hash","arg","eq","decodeURIComponent","navigateTo","location","composeUrlHash","args","hasOwnProperty","encodeURIComponent","addUrlParam","parsed","removeUrlParam","removeUrlParams","keys","setUrlSidePanel","sidepanel","setUrlInfoPanel","infopanel","setUrlTopic","alias_invalid","alias_already_taken","TopicDescEdit","getTopic","getAccessMode","isSelf","isMe","isMeTopicName","owner","fullName","description","newAvatar","newAvatarMime","aliasError","previousOnTags","aliasCheckTimer","aliasCheckPromise","tnNewTags","handleFullNameUpdate","handleImageUpdated","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handlePrivateUpdate","handleAliasUpdate","handleDescriptionUpdate","handleTagsUpdated","validateAlias","cancelValidator","onTagsUpdated","MAX_TITLE_LENGTH","onUpdateTopicDesc","desc","MAX_TOPIC_DESCRIPTION_LENGTH","readyToUpload","image","MAX_AVATAR_BYTES","getLargeFileHelper","upload","du","AVATAR_SIZE","MAX_EXTERN_ATTACHMENT_SIZE","clearTagPrefix","isValidTagValue","fnd","getFndTopic","validationPromise","checkTagUniqueness","clearTimeout","onUpdateTags","editable","find","t","AvatarUpload","onImageUpdated","full_name_placeholder","group_name_placeholder","private_placeholder","title_tag_manager","TopicCommonView","previousTagsUpdated","getType","onUpdateTagsRequest","ReactIntl","LocalStorageUtil","setObject","localStorage","setItem","JSON","stringify","getObject","getItem","parse","updateObject","oldVal","removeItem","shortDateFormat","locale","navigator","userLanguage","language","Date","getFullYear","getMonth","getDate","toLocaleTimeString","hour12","hour","minute","toLocaleDateString","month","day","year","relativeDateFormat","diff","floor","getTime","getTimezoneOffset","abs","Intl","RelativeTimeFormat","numeric","DateTimeFormat","seconds","fixedMin","hours","sec","bytesToHumanSize","bytes","sizes","bucket","log2","pow","round","toFixed","filename","light","fg","userId","stringToColorHash","flagEmoji","countryCode","codePoints","toUpperCase","char","fromCodePoint","APP_NAME","API_KEY","KNOWN_HOSTS","hosted","local","DEFAULT_HOST","LOGGING_ENABLED","KEYPRESS_DELAY","READ_DELAY","DEFAULT_P2P_ACCESS_MODE","NO_ACCESS_MODE","MEDIA_BREAKPOINT","MESSAGES_PAGE","MAX_INBAND_ATTACHMENT_SIZE","MAX_IMAGE_DIM","IMAGE_PREVIEW_DIM","VIDEO_PREVIEW_DIM","MAX_ONLINE_IN_TOPIC","MAX_PEER_TITLE_LENGTH","QUOTED_REPLY_LENGTH","FORWARDED_PREVIEW_LENGTH","EDIT_PREVIEW_LENGTH","MIN_DURATION","MAX_DURATION","LINK_CONTACT_US","LINK_PRIVACY_POLICY","LINK_TERMS_OF_SERVICE","IMMEDIATE_P2P_SUBSCRIPTION","QRCODE_SIZE","WAKE_UP_TIMEOUT","WAKE_UP_TICK","MIN_SWIPE_DISTANCE","TOAST_DURATION","DEFAULT_COLOR_SCHEME","DEFAULT_TEXT_SIZE","DRAFTY_FR_MIME_TYPE_LEGACY","handleFileReceived","files","randId","random","accept","htmlFor","uploading","QRCode","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","getPrototypeOf","obj","__proto__","mode","ns","create","r","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","prop","prototype","done","script","needAttach","scripts","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","timeout","doneFns","parentNode","Symbol","toStringTag","p","installedChunks","installedChunkData","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","stringToByteArray$1","out","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","encodeByteArray","webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","pos","c1","c2","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","DecodeBase64StringError","arguments","base64urlEncodeWithoutPadding","utf8Bytes","base64Encode","base64Decode","getDefaultsFromGlobal","getGlobal","__FIREBASE_DEFAULTS__","getDefaults","process","env","defaultsJsonString","getDefaultsFromEnvVariable","match","cookie","decoded","getDefaultsFromCookie","getDefaultAppConfig","_a","config","Deferred","wrapCallback","callback","isIndexedDBAvailable","indexedDB","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","open","onsuccess","close","deleteDatabase","onupgradeneeded","FirebaseError","code","customData","setPrototypeOf","captureStackTrace","ErrorFactory","service","serviceName","errors","fullCode","template","PATTERN","replaceTemplate","fullMessage","deepEqual","aKeys","bKeys","k","aProp","bProp","isObject","thing","getModularInstance","_delegate","Component","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setMultipleInstances","setServiceProps","setInstanceCreatedCallback","DEFAULT_ENTRY_NAME","Provider","container","component","instances","Map","instancesDeferred","instancesOptions","onInitCallbacks","identifier","normalizedIdentifier","normalizeInstanceIdentifier","has","deferred","set","isInitialized","shouldAutoInitialize","instance","getOrInitializeService","instanceIdentifier","getImmediate","options","optional","getComponent","setComponent","isComponentEager","instanceDeferred","entries","clearInstance","delete","services","INTERNAL","_delete","isComponentSet","getOptions","initialize","opts","onInit","existingCallbacks","Set","add","existingInstance","invokeOnInitCallbacks","callbacks","providers","addComponent","provider","getProvider","addOrOverwriteComponent","getProviders","LogLevel","levelStringToEnum","DEBUG","VERBOSE","INFO","WARN","ERROR","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","logLevel","toISOString","method","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","wrapFunction","func","IDBDatabase","transaction","IDBCursor","advance","continue","continuePrimaryKey","unwrap","storeNames","tx","transformCachableValue","unlisten","complete","DOMException","cacheDonePromiseForTransaction","object","IDBObjectStore","IDBIndex","Proxy","IDBRequest","success","promisifyRequest","openDB","version","blocked","upgrade","blocking","terminated","openPromise","oldVersion","newVersion","db","deleteDB","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","storeName","store","shift","oldTraps","PlatformLoggerServiceImpl","getPlatformInfoString","isVersionServiceProvider","library","logString","name$q","version$1","logger","_logLevel","_logHandler","_userLogHandler","TypeError","setLogLevel","logHandler","userLogHandler","debug","log","name$p","name$o","name$n","name$m","name$l","name$k","name$j","name$i","name$h","name$g","name$f","name$e","name$d","name$c","name$b","name$a","name$9","name$8","name$7","name$6","name$5","name$4","name$3","name$2","name$1","PLATFORM_LOG_STRING","_apps","_serverApps","_components","_addComponent","app","_registerComponent","componentName","serverApp","heartbeatController","triggerHeartbeat","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_options","_config","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","_container","checkDestroyed","isDeleted","appName","initializeApp","rawConfig","existingApp","newApp","registerVersion","libraryKeyOrName","variant","libraryMismatch","versionMismatch","warning","STORE_NAME","dbPromise","getDbPromise","createObjectStore","originalErrorMessage","writeHeartbeatsToIndexedDB","heartbeatObject","put","computeKey","idbGetError","appId","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","read","_b","agent","date","getUTCDateString","heartbeats","lastSentHeartbeatDate","singleDateHeartbeat","earliestHeartbeatIdx","earliestHeartbeatDate","getEarliestHeartbeatIdx","overwrite","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","heartbeatsCache","heartbeatEntry","hb","dates","countBytes","pop","extractHeartbeatsForHeader","headerString","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","idbHeartbeatObject","readHeartbeatsFromIndexedDB","heartbeatsObject","existingHeartbeatsObject","PENDING_TIMEOUT_MS","INTERNAL_AUTH_VERSION","TOKEN_EXPIRATION_BUFFER","isServerError","getInstallationsEndpoint","projectId","extractAuthTokenInfoFromResponse","response","token","requestStatus","expiresIn","responseExpiresIn","Number","creationTime","getErrorFromResponse","requestName","errorData","json","serverCode","serverMessage","serverStatus","getHeaders","apiKey","Headers","Accept","getHeadersWithAuth","appConfig","refreshToken","headers","getAuthorizationHeader","retryIfServerError","sleep","ms","VALID_FID_PATTERN","generateFid","fidByteArray","crypto","msCrypto","getRandomValues","fid","b64String","array","encode","getKey","fidChangeCallbacks","fidChanged","callFidChangeCallbacks","channel","getBroadcastChannel","postMessage","closeBroadcastChannel","broadcastFidChange","broadcastChannel","BroadcastChannel","onmessage","OBJECT_STORE_NAME","oldValue","remove","update","updateFn","getInstallationEntry","installations","registrationPromise","installationEntry","oldEntry","entry","registrationStatus","clearTimedOutRequest","updateOrCreateInstallationEntry","entryWithPromise","onLine","inProgressEntry","registrationTime","registeredInstallationEntry","heartbeatServiceProvider","endpoint","heartbeatService","heartbeatsHeader","authVersion","sdkVersion","responseValue","authToken","createInstallationRequest","registerInstallation","waitUntilFidRegistration","triggerRegistrationIfNecessary","updateInstallationRequest","generateAuthTokenRequest","getGenerateAuthTokenEndpoint","installation","refreshAuthToken","forceRefresh","tokenPromise","isEntryRegistered","oldAuthToken","isAuthTokenExpired","isAuthTokenValid","updateAuthTokenRequest","waitUntilAuthTokenRequest","inProgressAuthToken","requestTime","makeAuthTokenRequestInProgressEntry","updatedInstallationEntry","fetchAuthTokenFromServer","getToken","installationsImpl","completeInstallationRegistration","getMissingValueError","valueName","INSTALLATIONS_NAME","internalFactory","getId","configKeys","keyName","extractAppConfig","DEFAULT_VAPID_KEY","CONSOLE_CAMPAIGN_ID","DEFAULT_REGISTRATION_TIMEOUT","MessageType$1","MessageType","arrayToBase64","uint8Array","base64ToArray","base64String","repeat","rawData","outputArray","OLD_DB_NAME","OLD_OBJECT_STORE_NAME","upgradeDb","dbGet","firebaseDependencies","tokenDetails","oldTokenDetails","senderId","dbNames","databases","upgradeTransaction","oldDetails","auth","p256dh","fcmToken","createTime","subscriptionOptions","swScope","vapidKey","checkTokenDetails","migrateOldDatabase","dbSet","requestDeleteToken","unsubscribeOptions","getEndpoint","responseData","errorInfo","getBody","web","applicationPubKey","getTokenInternal","messaging","pushSubscription","swRegistration","subscription","pushManager","getSubscription","subscribe","userVisibleOnly","applicationServerKey","getPushSubscription","scope","dbOptions","currentOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","isTokenValid","updatedToken","updateOptions","requestUpdateToken","updatedTokenDetails","updateToken","getNewToken","deleteTokenInternal","dbRemove","unsubscribe","subscribeOptions","requestGetToken","externalizePayload","internalPayload","payload","collapseKey","collapse_key","messageId","fcmMessageId","messagePayloadInternal","notification","propagateNotificationPayload","propagateDataPayload","_c","_d","_e","fcmOptions","click_action","link","analyticsLabel","analytics_label","propagateFcmOptions","s1","s2","resultArray","_mergeStrings","MessagingService","analyticsProvider","deliveryMetricsExportedToBigQueryEnabled","onBackgroundMessageHandler","onMessageHandler","logEvents","isLogServiceStarted","messagingSenderId","registerDefaultSw","serviceWorker","register","registration","rejectTimeout","incomingSw","installing","waiting","onstatechange","ev","waitForRegistrationActive","browserErrorMessage","getToken$1","Notification","permission","requestPermission","updateVapidKey","ServiceWorkerRegistration","updateSwReg","serviceWorkerRegistration","logToScion","messageType","eventType","NOTIFICATION_CLICKED","PUSH_RECEIVED","getEventType","logEvent","message_id","message_name","message_time","message_device_time","messageEventListener","isFirebaseMessaging","next","dataPayload","WindowMessagingInternalFactory","isWindowSupported","cookieEnabled","PushSubscription","getMessagingInWindow","isSupported","deleteToken","deleteToken$1","onMessage","nextOrObserver","onMessage$1","Alert","onReject","onConfirm","confirm","clear_messages","clear_for_all","delete_for_all","send_retry","mute","unmute","reply","forward","edit","topic_delete","topic_delete_warning","delete_messages_warning","unblock","block","topic_block_warning","member_delete","archive","unarchive","edit_permissions","clear_messages_warning","pin_message","unpin_message","pin_chat","unpin_chat","ContextMenu","handlePageClick","handleEscapeKey","MenuItems","handler","errorHandler","onShowAlert","deleteMessages","retryMessage","replyToMessage","editMessage","pinMessage","topicPermissionSetter","ctrl","onTopicRemoved","delTopic","me","getMeTopic","pinTopic","delSubscription","dataset","hard","cancelSend","seq","delMessagesAll","delMessagesEdits","delMessagesList","flushMessage","createMessage","publishDraft","pin","updateMode","pickReply","userFrom","userName","menu","disabled","hSize","vSize","position","bounds","clickAt","SearchContacts","edited","search","initialQuery","handleSearchChange","handleSearch","handleClear","onSearchContacts","ForwardDialog","handleClose","handleSearchContacts","handleContactSelected","onInitFind","isNullValue","searchResults","isWriter","desription","search_placeholder","not_found_placeholder","RING_SOUND","CallIncoming","previousMetaDesc","resetDesc","onMetaDesc","handleRejectCall","handleAcceptCall","ringTimer","setInterval","onRinging","clearInterval","onAcceptCall","onClose","ButtonBack","onBack","MenuContacts","onNewTopic","onSettings","MenuStart","onSignUp","SideNavbar","archived_contacts_title","ContactsView","handleAction","unreadThreads","archivedCount","chatList","pinnedTopicRank","arch","touched","contactList","newState","action_ignored","onShowArchive","no_contacts","AccGeneralView","colorSchema","textSize","sendOnEnter","isMac","userAgentData","platform","handleColorSchemaSelected","handleTextSizeChanged","handleSendOnEnterSelected","onChangeColorSchema","onTextSizeChanged","onSendOnEnterChanged","verticalAlign","onSelectWallpapers","list","label","AccNotificationsView","handleCheckboxClick","what","onToggleMessageSounds","onTogglePushNotifications","messageSounds","desktopAlertsEnabled","desktopAlerts","AccSupportView","getLibrary","serverVersion","serverAddress","LoginView","login","password","hostName","saveToken","persist","handleLoginChange","handlePasswordChange","handleToggleSaveToken","onPersistenceChange","onLogin","submitClasses","login_prompt","autoCorrect","autoCapitalize","password_prompt","invalid_id","NewTopicById","qrCodeRef","groupId","handleKeyPress","myURI","prefix","NewTopicGroup","handleFieldEdit","handleImageChanged","handleTagsChanged","handleChannelToggle","search_for_contacts","search_no_results","NewTopicView","urlParams","initialTab","tabSelected","searchQuery","handleTabClick","handleSearchResultSelected","handleNewGroupSubmit","handleGroupByID","email","TAG_EMAIL","tel","TAG_PHONE","onCreateTopic","dataUrl","priv","no_contacts_placeholder","URI_TOPIC_ID_PREFIX","getCurrentUserID","HostSelector","changed","handleHostNameChange","onServerAddressChange","hostOptions","SettingsView","transport","secureConnection","handleTransportSelected","handleServerAddressChange","handleToggleSecure","onUpdate","names","ws","lp","transportOptions","phone","ValidationView","credCode","codeReceived","handleCodeChange","credMethod","credToken","numbers_only","AccountSettingsView","CreateAccountView","AccSecurityView","PasswordResetView","WallpapersView","settings","general","security","crop","notif","acc_general","support","newtpk","cred","reset","wallpapers","SidepanelView","handleNewTopic","onNavigate","view","errorLevel","errorText","errorAction","errorActionText","loadSpinnerVisible","loginDisabled","onLoginRequest","Suspense","fallback","reqCredMethod","onShowCountrySelector","onCreateAccount","onGlobalSettings","onCredAdd","onCredDelete","onCredConfirm","onUpdateAccountDesc","onUpdateAccountTags","incognitoMode","onUpdatePassword","onLogout","onDeleteAccount","onShowBlocked","onToggleIncognitoMode","wallpaper","wallpaperSize","wallpaperBlur","systemColorSchema","onWallpaperSelected","onValidateCredentials","onRequest","onPasswordResetRequest","onReset","onResetPassword","detectServerAddress","host","protocol","hostname","port","isSecureConnection","PhoneCountrySelector","InfoView","MessagesView","POP_SOUND","reconnect_countdown","reconnect_now","push_init_failed","invalid_security_token","no_connection","code_doesnot_match","menu_item_info","menu_item_audio_call","menu_item_video_call","cred_confirmed_successfully","password_reset_success","select_country","TinodeWeb","getBlankState","handleResize","handleHashRoute","handleOnline","handleColorSchemeChange","checkForAppUpdate","handleVisibilityEvent","handleLoginRequest","handlePersistenceChange","handleConnected","handleAutoreconnectIteration","doLogin","handleLoginSuccessful","handleDisconnect","tnMeMetaDesc","tnMeContactUpdate","tnMeSubsUpdated","resetContactList","tnInitFind","tnFndSubsUpdated","handleTopicSelected","handleHideMessagesView","handleSendMessage","handleNewChatInvitation","handleNewAccount","handleNewAccountRequest","handleUpdatePasswordRequest","handleUpdateAccountTagsRequest","handleToggleIncognitoMode","handleChangeColorSchema","handleChangeTextSize","handleSendOnEnter","handleSelectWallpapers","handleWallpaperSelected","handleSettings","handleGlobalSettings","handleShowArchive","handleShowBlocked","handleToggleMessageSounds","handleCredAdd","handleCredDelete","handleCredConfirm","initFCMessaging","toggleFCMToken","handlePushMessage","handleSidepanelCancel","handleStartTopicRequest","handleNewTopicCreated","handleTopicUpdateRequest","handleUnarchive","handleChangePermissions","handleTagsUpdateRequest","handleLogout","handleDeleteAccount","handleDeleteTopicRequest","handleDeleteMessagesRequest","handleLeaveUnsubRequest","handleBlockTopicRequest","handleReportTopic","handleShareTheCard","handleShowContextMenu","defaultTopicContextMenu","handleHideContextMenu","handleShowAlert","handleShowInfoView","handleMemberUpdateRequest","handleValidateCredentialsRequest","handlePasswordResetRequest","handleResetPassword","handleContextMenuAction","handleShowCountrySelector","handleShowForwardDialog","handleHideForwardDialog","handleStartVideoCall","handleStartAudioCall","handleInfoMessage","handleDataMessage","handleCallClose","handleCallInvite","handleCallRinging","handleCallHangup","handleCallSendOffer","handleCallIceCandidate","handleCallSendAnswer","handleCallAccept","sendMessageToTopic","callTimeoutTimer","ready","autoLogin","messageSoundsOff","matchMedia","firebaseInitApp","FIREBASE_INIT","firebaseToken","applicationVisible","hidden","sidePanelSelected","sidePanelTitle","sidePanelAvatar","myTrustedBadges","liveConnection","topicSelectedOnline","topicSelectedAcs","newTopicParams","displayMobile","innerWidth","infoPanel","mobilePanel","callTopic","callAudioOnly","callShouldStart","contextMenuVisible","contextMenuBounds","contextMenuClickAt","contextMenuParams","contextMenuItems","forwardDialogVisible","forwardMessage","alertVisible","alertParams","searchableContacts","requestedTopic","handleOnlineOn","handleOnlineOff","documentElement","colorScheme","setProperty","applyWallpaperSettings","lastWakeUpCheck","wakeUpTicker","clientWidth","viewportHeight","clientHeight","tnSetup","onConnect","onDisconnect","onAutoreconnectIteration","onInfoMessage","onDataMessage","expires","setAuthToken","connect","parsedNav","cred_done","persistentCache","onSetupCompleted","secure","setHumanLanguage","enableLogging","oobNotification","fcm","firebaseGetMessaging","getRegistration","reg","requestFCMToken","setDeviceToken","firebaseOnMessage","sw","firebaseGetToken","messagingVapidKey","mobile","onupdatefound","installingWorker","controller","newTopicTabSelected","tab","topicType","getTopicAccessMode","stateForError","reconnectCountdown","reconnect","isConnected","meth","resp","initStorage","clearStorage","getServerInfo","ver","build","reqCred","prom","fmtTime","tmpToken","isAuthenticated","getAuthToken","credential","loginPromise","connectionPromise","loginBasic","loginToken","navigateToCredentialsView","goToTopic","onContactUpdate","onSubsUpdated","startMetaQuery","withLaterSub","withDesc","withTags","withCred","disconnect","finally","urlHash","isPresencer","checkIfPinsUpdated","cont","archived","isArchived","unused","prepareSearchableContacts","foundContacts","merged","isP2PTopicName","updated","past","pins","isSubscribed","withSub","setMeta","getMeta","_topicName","isTopicOnline","uploadCompletionPromise","uploader","_uploader","completion","subscribePromise","calls","queuedMessages","pub","_sending","webrtc","publishMessage","getGiven","sub","isP2PType","am","updateWant","getWant","login_","password_","public_","cred_","tags_","attachments","createAccountBasic","on","schema","applyColorSchema","systemSchema","effectiveSchema","blur","option","enabled","firebaseDelToken","delCredential","scheme","basicNavigator","infoNavigator","isTopicCached","defacs","newGroupTopicName","oldName","newName","nextState","updateAccountBasic","getCurrentLogin","updateGiven","cleared","Promose","delCurrentUser","leave","report","menuItems","header","init","forwardedContent","appendLineBreak","mention","msgPreview","quote","contentType","muted","self_blocked","subscribed","deleter","writer","p2p","isDeleter","keepForwardedMessage","confirmText","rejectText","added","invite","requestResetAuthSecret","newPassword","tempAuth","secret","dial","selectedCallback","callSeq","audioOnly","aonly","videoCall","sdp","candidate","setCallTopic","upd","latestMsgVersion","myUserName","onCancelForwardMessage","onCallHangup","onCallInvite","onCallSendOffer","onCallIceCandidate","onCallSendAnswer","onHideMessagesView","onNewTopicCreated","onChangePermissions","onNewChat","sendMessage","onVideoCallClosed","panel","onTopicDescUpdateRequest","onMemberUpdateRequest","onDeleteTopic","onDeleteMessages","onLeaveTopic","onBlockTopic","onReportTopic","onShareTheCard","onTopicTagsUpdateRequest","onTopicUnArchive","measurementId","gtag","dataLayer","prepend","messageLoader","hl","languages","normalized","baseLanguage","htmlLang","html","root","IntlProvider","textComponent"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"index.prod.js","mappings":"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","sources":["webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/the-card-mini.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/external var \"QRCode\"","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./node_modules/@firebase/util/dist/postinstall.mjs","webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/acc-general-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tinode-webapp:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 8;\n\nexport default class Cropper extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Coordinates of the top left corner of the image in bounding box (container) coordinates.\n panX: 0,\n panY: 0,\n // Origin of the zoom in image coordinates.\n originX: 0,\n originY: 0,\n // Zoom scale.\n zoom: 1,\n // Zoom min and max.\n minZoom: 0.001,\n maxZoom: DEFAULT_MAX_ZOOM,\n };\n\n // References to DOM elements for hooking up events and getting screen dimensions.\n // The transparent element which captures mouse moves (moves with the image).\n this.overlay = React.createRef();\n // The image cutout window or view port (static).\n this.cutout = React.createRef();\n // Scaled and translated image preview.\n this.preview = React.createRef();\n // The main container (static).\n this.boundingBox = React.createRef();\n\n // The original image width and height before any scaling (does not change).\n this.imageWidth = 0;\n this.imageHeight = 0;\n\n // Mouse position when dragging.\n this.mouseX = 0\n this.mouseY = 0;\n // Length of the previous mouse move when dragging.\n this.prevDistance = 0;\n\n // Bounding rectangles of static elements (does not change).\n this.cutoutRect = {};\n this.bBoxRect = {};\n // Center of the bounding box (does not change).\n this.originX = 0;\n this.originY = 0;\n\n this.initScaling = this.initScaling.bind(this);\n this.onZoom = this.onZoom.bind(this);\n this.handleZoom = this.handleZoom.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.mouseMove = this.mouseMove.bind(this);\n this.mouseTouch = this.mouseTouch.bind(this);\n this.positionAll = this.positionAll.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n componentDidMount() {\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n // The rectangle position is in viewport coordinates.\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n // Center of the bounding box in container coordinates.\n this.originX = this.bBoxRect.width / 2;\n this.originY = this.bBoxRect.height / 2;\n\n // The cutout circle bounds in viewport coordinates.\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\n }\n\n componentWillUnmount() {\n if (this.overlay.current) {\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n }\n }\n\n // Position all elements.\n positionAll(panX, panY, zoom) {\n // Zoom origin in image preview coordinates.\n this.setState({\n panX: panX,\n panY: panY,\n zoom: zoom,\n originX: this.originX - panX,\n originY: this.originY - panY,\n });\n\n // Pass cut out coordinates to caller.\n const left = (this.originX - panX) * zoom - this.originX;\n const top = (this.originY - panY) * zoom - this.originY;\n this.props.onChange(\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n this.cutoutRect.width / zoom,\n this.cutoutRect.height / zoom,\n zoom);\n }\n\n // Check if new location is within the limits.\n static checkBound(currPan, img, cutout, delta) {\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n if (nextDiff == 0) {\n // Cutout is completely within the image.\n currPan += delta;\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n // Cutout is outside of the range but closer to the bound.\n currPan += delta;\n }\n return currPan;\n }\n\n initScaling() {\n // Initialize components.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n this.imageWidth = imgRect.width;\n this.imageHeight = imgRect.height;\n\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n this.setState({\n minZoom: minZoom,\n maxZoom: minZoom * DEFAULT_MAX_ZOOM\n });\n\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n // Converting from viewport coordinates to container, then panning.\n const panX = this.cutoutRect.left - this.bBoxRect.left -\n (imgRect.width - this.cutoutRect.width) / 2;\n const panY = this.cutoutRect.top - this.bBoxRect.top -\n (imgRect.height - this.cutoutRect.height) / 2;\n\n this.positionAll(panX, panY, zoom);\n }\n\n onZoom(e) {\n this.handleZoom(e.target.value);\n }\n\n handleZoom(zoom) {\n let panX = this.state.panX;\n let panY = this.state.panY;\n\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n\n // Calculate image coordinates at the new zoom.\n const imgLeft = this.originX - (this.originX - panX) * zoom;\n const imgRight = imgLeft + this.imageWidth * zoom;\n const imgTop = this.originY - (this.originY - panY) * zoom;\n const imgBottom = imgTop + this.imageHeight * zoom;\n\n // Cutout in the same coordinates as the image.\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n const coRight = coLeft + this.cutoutRect.width;\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\n const coBottom = coTop + this.cutoutRect.height;\n\n if (coLeft < imgLeft) {\n panX -= (imgLeft - coLeft) / zoom;\n } else if (coRight > imgRight) {\n panX += (coRight - imgRight) / zoom;\n }\n\n if (coTop < imgTop) {\n panY -= (imgTop - coTop) / zoom;\n } else if (coBottom > imgBottom) {\n panY += (coBottom - imgBottom) /zoom;\n }\n\n this.positionAll(panX, panY, zoom);\n }\n\n mouseDown(e) {\n if (e.touches) {\n this.mouseX = e.touches[0].pageX;\n this.mouseY = e.touches[0].pageY;\n } else {\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\n window.addEventListener('touchend', this.mouseUp, { passive: true });\n // Disable text selection in the entire document.\n document.body.style['userSelect'] = 'none';\n }\n\n // Perform image panning.\n translate(pageX, pageY) {\n const dX = (pageX - this.mouseX) / this.state.zoom;\n const dY = (pageY - this.mouseY) / this.state.zoom;\n\n this.mouseX = pageX;\n this.mouseY = pageY;\n\n // Make sure the image is within the cutout window.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n // Check if the new position is within the boundaries, and if not if it's closer to them.\n const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n [this.cutoutRect.left, this.cutoutRect.right], dX);\n const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n this.positionAll(panX, panY, this.state.zoom);\n }\n\n // Image panning.\n mouseMove(e) {\n e.preventDefault();\n this.translate(e.pageX, e.pageY);\n }\n\n mouseTouch(e) {\n e.preventDefault();\n\n if (e.touches.length == 1) {\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\n return;\n }\n\n // Image zooming by pinching.\n const [touch0, touch1] = e.touches;\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n if (!this.prevDistance) {\n this.prevDistance = distance / this.state.zoom;\n }\n\n let scale = (distance / this.prevDistance);\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n }\n\n mouseUp(e) {\n window.removeEventListener('mousemove', this.mouseMove);\n window.removeEventListener('touchmove', this.mouseTouch);\n window.removeEventListener('mouseup', this.mouseUp);\n window.removeEventListener('touchend', this.mouseUp);\n // Re-enable text selection.\n document.body.style['userSelect'] = '';\n\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n }\n\n render() {\n // transform3d: position and scale.\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n // transformOrigin: zoom origin.\n const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n // Overlay position and size are exactly equal to the position and size of the transformed image\n // except it uses different coordinates.\n const overlay = {\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\n width: `${this.imageWidth * this.state.zoom}px`,\n height: `${this.imageHeight * this.state.zoom}px`\n };\n return (\n
    \n
    \n \"\"\n\n
    \n
    \n
    \n
    \n \n
    \n
    \n );\n }\n}\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport Cropper from './cropper.jsx';\nimport { imageCrop } from '../lib/blob-helpers.js';\n\nexport default class AvatarCrop extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n scale: 1\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleChange = this.handleChange.bind(this);\n }\n\n // Cut out in image coordinates and desired scale factor.\n handleChange(left, top, width, height, scale) {\n this.setState({\n left: left,\n top: top,\n width: width,\n height: height,\n scale: scale\n });\n }\n\n handleSubmit() {\n imageCrop(this.props.mime, this.props.avatar,\n this.state.left, this.state.top, this.state.width, this.state.height,\n this.state.scale)\n .then(img => {\n this.props.onSubmit(img.mime, img.blob, img.width, img.height);\n })\n .catch(err => {\n this.props.onError(err);\n });\n }\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n {this.props.onCancel ?\n \n : null}\n \n
    \n
    \n );\n }\n};\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.25.2\";\n","import React from 'react';\n\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\n\n/* Contact's labels: [you], or icons [muted], [blocked] */\nexport default class ContactBadges extends React.PureComponent {\n render() {\n let badges = null;\n if (this.props.badges && this.props.badges.length > 0) {\n badges = [];\n this.props.badges.forEach(b => {\n const color = (b.color ? ' ' + b.color : '');\n if (b.icon) {\n badges.push({icon_mapping[b.icon] || b.icon});\n } else {\n badges.push({b.name});\n }\n });\n return <>{badges};\n }\n return null;\n }\n};\n","import React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst icon_mapping = {'staff': 'verified_user'};\n\nconst messages = defineMessages({\n badge_verified: {\n id: 'badge_verified',\n defaultMessage: 'Verified/official',\n description: 'Explanation of a verified account or topic badge'\n },\n badge_staff: {\n id: 'badge_staff',\n defaultMessage: 'Staff-managed',\n description: 'Explanation of a staff-managed account or topic badge'\n },\n badge_danger: {\n id: 'badge_danger',\n defaultMessage: 'Untrustworthy',\n description: 'Suspicious or untrustworthy account or topic badge'\n },\n});\n\n\n/* Trusted badges with labels: verified, staff, danger */\nclass BadgeList extends React.PureComponent {\n render() {\n const {formatMessage} = this.props.intl;\n let badges = null;\n if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {\n badges = [];\n this.props.trustedBadges.forEach(b => {\n const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);\n const style = 'material-icons ' + b + '-color';\n badges.push(
    {icon_mapping[b] || b} {comment}
    );\n });\n return <>{badges};\n }\n return null;\n }\n};\n\nexport default injectIntl(BadgeList);\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\n + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n return (this.props.show ?\n
    : null);\n }\n}\n","import React from 'react';\n\n/* CheckBox: styled three-state checkbox, either clickable or static */\nexport default class CheckBox extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n handleChange() {\n this.props.onChange(this.props.name, !this.props.checked);\n }\n\n render() {\n let classList = ['material-icons'];\n let iconName;\n if (Array.isArray(this.props.className)) {\n classList.push(...this.props.className);\n } else if (this.props.className) {\n classList.push(this.props.className);\n }\n if (this.props.onChange) {\n if (this.props.checked) {\n classList.push('blue', 'clickable');\n iconName = 'check_box';\n } else if (this.props.checked === false) {\n classList.push('blue', 'clickable');\n iconName = 'check_box_outline_blank';\n } else {\n classList.push('lt-blue');\n iconName = 'indeterminate_check_box';\n }\n } else {\n if (this.props.checked) {\n iconName = 'check_box';\n } else {\n iconName = 'check_box_outline_blank';\n }\n }\n let attrs = {\n className: classList.join(' '),\n id: this.props.id,\n };\n if (this.props.onChange) {\n attrs.onClick = this.handleChange;\n }\n return React.createElement('i', attrs, iconName);\n }\n}\n","import React from 'react';\n\nimport MenuCancel from './menu-cancel.jsx';\n\nexport default class ErrorPanel extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n show: false,\n };\n\n this.hide = this.hide.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.level !== this.props.level) {\n this.setState({\n show: !(!this.props.level)\n });\n }\n }\n\n hide() {\n this.setState({show: false});\n if (this.props.onClearError) {\n this.props.onClearError();\n }\n }\n\n render() {\n const icons = {err: 'error', warn: 'warning', info: 'info'}\n const level = icons[this.props.level] || '';\n const className = 'info-box ' + level;\n return (\n
    \n
    {level}
    \n \n {this.props.text}\n {this.props.action ?\n <>\n   {e.preventDefault(); this.props.action();}}>\n {this.props.actionText}\n \n \n : null}\n \n
    \n
    \n );\n }\n};\n","// In-place text editor. Shows text with an icon which toggles it into an input field.\nimport React from 'react';\n\nimport VisiblePassword from './visible-password.jsx';\n\nexport default class InPlaceEdit extends React.Component {\n constructor(props) {\n super(props);\n\n this.selfRef = React.createRef();\n\n this.state = {\n active: props.active,\n initialValue: props.value || '',\n value: props.value || '',\n valid: true\n };\n\n this.handeTextChange = this.handeTextChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleStartEditing = this.handleStartEditing.bind(this);\n this.handleEditingFinished = this.handleEditingFinished.bind(this);\n this.handlePasswordFinished = this.handlePasswordFinished.bind(this);\n }\n\n componentDidUpdate(prevProps, prevState) {\n // If text has changed while in read mode, update text and discard changes.\n // Ignore update if in edit mode.\n const newValue = this.props.value || '';\n if (prevState.initialValue != newValue && !prevState.active) {\n this.setState({\n initialValue: newValue,\n value: newValue\n });\n }\n }\n\n handeTextChange(e) {\n this.setState({value: e.target.value || ''});\n if (this.props.validator) {\n Promise.resolve(this.props.validator(e.target.value))\n .then(valid => {\n this.setState({valid: valid});\n })\n .catch(err => {\n // If it's interrupted, then the err is undefined. Ignore it.\n if (err) {\n this.setState({valid: false});\n }\n });\n }\n }\n\n handleKeyDown(e) {\n if (e.keyCode === 27) {\n // Escape pressed\n this.setState({value: this.props.value, active: false});\n } else if (e.keyCode === 13) {\n // Enter pressed\n this.handleEditingFinished(e);\n }\n }\n\n handleStartEditing() {\n if (!this.props.readOnly) {\n this.setState({active: true}, _ => {\n if (this.selfRef.current) {\n this.selfRef.current.focus();\n }\n });\n }\n }\n\n handleEditingFinished(event) {\n const value = this.state.value.trim();\n if (this.props.required && (!event.target.checkValidity() || !value)) {\n // Empty input\n this.setState({value: this.props.value, active: false});\n return;\n }\n this.setState({active: false});\n if ((value || this.props.value) && (value !== this.props.value) && this.state.valid) {\n this.props.onFinished(value);\n }\n }\n\n handlePasswordFinished(value) {\n this.setState({active: false});\n if (value && (value !== this.props.value)) {\n this.props.onFinished(value);\n }\n }\n\n render() {\n if (!this.state.active) {\n let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;\n let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');\n if (!spanText) {\n spanText = this.props.placeholder;\n spanClass += ' placeholder';\n }\n if (!this.props.multiline || this.props.multiline == 1) {\n spanClass += ' short';\n }\n\n return (\n {this.props.iconLeft && {this.props.iconLeft}}\n {spanText}\n {this.props.iconRight && {this.props.iconRight}}\n );\n }\n\n let element;\n const attr = {};\n if (this.props.type == 'password') {\n element = VisiblePassword;\n attr.onFinished = this.handlePasswordFinished;\n } else {\n if (this.props.multiline > 1) {\n element = 'textarea';\n attr.rows = this.props.multiline;\n attr.className = 'in-place-edit';\n } else {\n element = 'input';\n attr.type = this.props.type || 'text';\n attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left'\n : this.props.iconRight ? ' with-icon-right' : '');\n if (this.props.maxLength) {\n attr.maxLength=this.props.maxLength;\n }\n }\n attr.value = this.state.value;\n attr.className += this.state.valid ? '' : ' invalid';\n attr.ref = this.selfRef;\n attr.onChange = this.handeTextChange;\n attr.onKeyDown = this.handleKeyDown;\n attr.onBlur = this.handleEditingFinished;\n }\n attr.placeholder = this.props.placeholder;\n attr.required = this.props.required ? 'required' : '';\n attr.autoComplete = this.props.autoComplete;\n attr.autoFocus = true;\n if (this.props.spellCheck !== undefined) {\n attr.spellCheck = this.props.spellCheck ? 'true' : 'false';\n }\n\n if (this.props.iconLeft || this.props.iconRight) {\n return (\n <>\n {this.props.iconLeft && {this.props.iconLeft}}\n {React.createElement(element, attr, null)}\n {this.props.iconRight && {this.props.iconRight}}\n \n );\n }\n return React.createElement(element, attr, null);\n }\n};\n","module.exports = React;","// TagManager: edit topic or user tags.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport ChipInput from './chip-input.jsx';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { MAX_TAG_COUNT, MAX_TAG_LENGTH, MIN_TAG_LENGTH } from '../config.js';\nimport { arrayEqual } from '../lib/utils.js';\n\nexport default class TagManager extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tags: this.props.tags || [],\n alias: Tinode.tagByPrefix(this.props.tags, Tinode.TAG_ALIAS) || '',\n tagInput: '',\n activated: this.props.activated\n };\n\n this.handleTagInput = this.handleTagInput.bind(this);\n this.handleAddTag = this.handleAddTag.bind(this);\n this.handleRemoveTag = this.handleRemoveTag.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n const tags = nextProps.tags || [];\n if (!arrayEqual(tags, prevState.tags) && !prevState.activated) {\n return {\n tags: tags || [],\n alias: Tinode.tagByPrefix(tags, Tinode.TAG_ALIAS) || '',\n };\n }\n return null;\n }\n\n handleTagInput(text) {\n this.setState({tagInput: text});\n if (text.length > 0) {\n const last = text[text.length-1];\n if (text[0] == '\"') {\n // This is a quoted string.\n if (text.length > 1 && last == '\"') {\n this.handleAddTag(text.substring(1, text.length-1));\n }\n } else if (last == ',' || last == ' ' || last == ';' || last == '\"') {\n // User entered ',', ' ' or ';'\n this.handleAddTag(text.substring(0, text.length-1).trim());\n }\n }\n }\n\n handleAddTag(tag) {\n const maxTagCount = this.props.tinode.getServerParam(Tinode.MAX_TAG_COUNT, MAX_TAG_COUNT);\n\n if (tag.length > 0 && this.state.tags.length < maxTagCount) {\n const tags = this.state.tags.slice(0);\n tags.push(tag);\n\n this.setState({tags: tags, tagInput: ''});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n return tags;\n }\n return this.state.tags;\n }\n\n handleRemoveTag(tag, index) {\n const tags = this.state.tags.slice(0);\n tags.splice(index, 1);\n this.setState({tags: tags});\n if (this.props.onTagsChanged) {\n this.props.onTagsChanged(tags);\n }\n }\n\n handleSubmit() {\n // Add unprocessed input to tags.\n let tags = this.handleAddTag(this.state.tagInput.trim());\n // Add back the alias (and overwrite one possibly added by hand).\n tags = Tinode.setUniqueTag(tags, this.state.alias);\n // Submit the updated list.\n this.props.onSubmit(tags);\n this.setState({activated: false, tags: this.props.tags || []});\n }\n\n handleCancel() {\n this.setState({activated: false, tagInput: '', tags: this.props.tags || []});\n if (this.props.onCancel) {\n this.props.onCancel();\n }\n }\n\n render() {\n const minTagLength = this.props.tinode.getServerParam(Tinode.MIN_TAG_LENGTH, MIN_TAG_LENGTH);\n const maxTagLength = this.props.tinode.getServerParam(Tinode.MAX_TAG_LENGTH, MAX_TAG_LENGTH);\n\n let tags = [];\n if (this.state.activated) {\n this.state.tags.forEach(tag => {\n if (tag != this.state.alias) {\n tags.push({user: tag, invalid: (tag.length < minTagLength || tag.length > maxTagLength)});\n }\n });\n\n } else {\n this.state.tags.forEach(tag => {\n if (tag != this.state.alias) {\n tags.push({tag});\n }\n });\n if (tags.length == 0) {\n tags = (\n \n \n \n );\n }\n }\n return (\n
    \n
    \n \n
    \n {this.state.activated ?\n
    \n {\n (add_tags_prompt) => \n }\n {this.props.onSubmit || this.props.onCancel ?\n
    \n \n \n
    \n : null}\n
    \n :\n \n }\n
    \n );\n }\n};\n","// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\nimport { WALLPAPER_DEFAULTS } from '../config.js';\n\n// Make shortcut icon appear with a green dot + show unread count in title.\nexport function updateFavicon(count) {\n const oldIcon = document.getElementById('shortcut-icon');\n const head = document.head || document.getElementsByTagName('head')[0];\n const newIcon = document.createElement('link');\n newIcon.type = 'image/png';\n newIcon.id = 'shortcut-icon';\n newIcon.rel = 'shortcut icon';\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\n if (oldIcon) {\n head.removeChild(oldIcon);\n }\n head.appendChild(newIcon);\n\n document.title = (count > 0 ? '('+count+') ' : '') + 'Tinode';\n}\n\n// Create theCard which represents user's or topic's \"public\" info.\nexport function theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : Tinode.DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: Tinode.DEL_CHAR\n };\n } else {\n card.photo = {\n data: Tinode.DEL_CHAR,\n ref: imageUrl\n };\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n }\n\n return card;\n}\n\n// Deep-shallow compare two arrays: shallow compare each element.\nexport function arrayEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (!Array.isArray(a) || !Array.isArray(b)) {\n return false;\n }\n\n // Compare lengths first.\n if (a.length != b.length) {\n return false;\n }\n // Order of elements is ignored.\n a.sort();\n b.sort();\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\n// Checks (loosely) if the given string is a phone. If so, returns the phone number in a format\n// as close to E.164 as possible.\nexport function asPhone(val) {\n val = val.trim();\n if (/^(?:\\+?(\\d{1,3}))?[- (.]*(\\d{3})[- ).]*(\\d{3})[- .]*(\\d{2})[- .]*(\\d{2})?$/.test(val)) {\n return val.replaceAll(/[- ().]*/g, '');\n }\n return null;\n}\n\n// Checks (loosely) if the given string is an email. If so returns the email.\nexport function asEmail(val) {\n val = val.trim();\n if (/^[a-z0-9_.+-]+@[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.test(val)) {\n return val;\n }\n return null;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// //example.com or \\\\example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n // Replacing backslashes with forward slashes to mimic JS URL parser then testing for\n // 'scheme:' and '//' with optional space at the start.\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url.replace(/\\\\/g, '/'));\n}\n\n// Ensure URL does not present an XSS risk. Optional allowedSchemes may contain an array of\n// strings with permitted URL schemes, such as ['ftp', 'ftps']; otherwise accept http and https only.\nexport function sanitizeUrl(url, allowedSchemes) {\n if (typeof url != 'string') {\n return url;\n }\n\n // Strip control characters and whitespace. They are not valid URL characters anyway.\n url = url.replace(/[^\\x21-\\x7E]/gmi, '').trim();\n\n // Replace backslashes with forward slashes. They will be replaced in the URL parser anyway.\n url = url.replace(/\\\\/g, '/');\n\n // Relative URLs are safe.\n // Relative URL does not start with ':', abcd123: or '//'.\n if (!/^([a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url)) {\n return url;\n }\n\n // Blob URLs are safe.\n if (/^blob:http/.test(url)) {\n return url;\n }\n\n // Absolute URL. Accept only safe schemes, or no scheme.\n const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';\n const re = new RegExp('^((' + schemes + '):|//)', 'i');\n if (!re.test(url)) {\n return null;\n }\n\n return url;\n}\n\n// Ensure URL is suitable as a source like field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[-+.a-z0-9]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\nexport function defaultWallpaper() {\n const wallpaperIndex = require('../../img/bkg/index.json');\n const wp = wallpaperIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index];\n return {name: `../${WALLPAPER_DEFAULTS.path}${wp.name}`, size: wp.size};\n}\n\nexport function wallpaperNameFromUrl(wallpaperUrl) {\n // Get filename from URL.\n const parts = wallpaperUrl.split('/');\n return parts[parts.length - 1];\n}\n\nexport function wallpaperTypeFromUrl(wallpaperUrl) {\n // Get filename from URL.\n const fname = wallpaperNameFromUrl(wallpaperUrl);\n const wallpaperIndex = require('../../img/bkg/index.json');\n for (const type in wallpaperIndex) {\n for (let i = 0; i < wallpaperIndex[type].length; i++) {\n if (wallpaperIndex[type][i].name == fname) {\n return type;\n }\n }\n }\n return null;\n}\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n\n","// The X menu to be displayed in title bars.\nimport React from 'react';\n\nexport default class MenuCancel extends React.PureComponent {\n render() {\n return (\n {e.preventDefault(); this.props.onCancel();}}>\n close\n \n );\n }\n}\n","// A panel included into a list of contacts with an action text.\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\n\nclass ContactAction extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.onAction(this.props.action);\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n return (\n
  • \n
    {formatMessage(this.props.title, this.props.values)}
    \n
  • \n );\n }\n};\n\nexport default injectIntl(ContactAction);\n","// ContactList: component for showing a list of contacts,\n// such as a list of group members in a group chat.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode } from 'tinode-sdk';\n\nimport Contact from './contact.jsx';\nimport ContactAction from './contact-action.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nimport { MESSAGE_PREVIEW_LENGTH } from '../config.js';\n\nconst messages = defineMessages({\n badge_you: {\n id: 'badge_you',\n defaultMessage: 'you',\n description: 'Badge for indicating the current user'\n },\n badge_owner: {\n id: 'badge_owner',\n defaultMessage: 'owner',\n description: 'Badge for indicating the owner'\n }\n});\n\nclass ContactList extends React.Component {\n render() {\n const { formatMessage } = this.props.intl;\n const showCheckmark = Array.isArray(this.props.topicSelected);\n const contactNodes = [];\n\n // Count of contacts, excluding action items.\n let contactsCount = 0;\n if (this.props.showSelfTopic) {\n const selected = showCheckmark ?\n (this.props.topicSelected.indexOf('slf') > -1) :\n (this.props.topicSelected === 'slf');\n contactNodes.push(\n \n );\n contactsCount ++;\n }\n if (this.props.contacts && this.props.contacts.length > 0) {\n this.props.contacts.forEach(c => {\n if (c.action) {\n // Action item\n contactNodes.push(\n );\n } else {\n // Normal contact\n const key = this.props.showMode ? c.user : (c.topic || c.user);\n // If filter function is provided, filter out the items\n // which don't satisfy the condition.\n if (this.props.filterFunc && this.props.filter) {\n const filterOn = [key];\n if (c.private && c.private.comment) {\n filterOn.push(('' + c.private.comment).toLowerCase());\n }\n if (c.public && c.public.fn) {\n filterOn.push(('' + c.public.fn).toLowerCase());\n }\n if (!this.props.filterFunc(this.props.filter, filterOn)) {\n return;\n }\n }\n\n const isChannel = Tinode.isChannelTopicName(key);\n const isGroup = !isChannel && Tinode.isGroupTopicName(key);\n const selected = showCheckmark ?\n (this.props.topicSelected.indexOf(key) > -1) :\n (this.props.topicSelected === key);\n const badges = [];\n if (this.props.showMode) {\n if (key == this.props.myUserId) {\n badges.push({name: formatMessage(messages.badge_you), color: 'green'});\n }\n if (c.acs && c.acs.isOwner()) {\n badges.push({name: formatMessage(messages.badge_owner), color: 'blue'});\n }\n }\n\n const comment = Array.isArray(c.private) ?\n c.private.join(',') : (c.private ? c.private.comment : null);\n let preview;\n let forwarded;\n let previewIsResponse;\n let deliveryStatus;\n if (!this.props.showMode && c.latestMessage) {\n const msg = c.latestMessage();\n if (msg) {\n forwarded = msg.head ? msg.head.forwarded : null;\n deliveryStatus = msg._status || c.msgStatus(msg, true);\n previewIsResponse = msg.from != this.props.myUserId;\n if (msg.content) {\n preview = typeof msg.content == 'string' ?\n msg.content.substr(0, MESSAGE_PREVIEW_LENGTH) :\n Drafty.preview(msg.content, MESSAGE_PREVIEW_LENGTH);\n }\n }\n }\n\n contactNodes.push(\n \n );\n contactsCount ++;\n }\n }, this);\n }\n\n return (\n
    \n {contactsCount == 0 ?\n
    \n :\n null\n }\n {contactNodes.length > 0 ?\n
      \n {contactNodes}\n
    \n :\n null\n }\n
    \n );\n }\n};\n\nexport default injectIntl(ContactList);\n","module.exports = tinode;","// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat';\nimport { base64ToIntArray } from '../lib/blob-helpers';\n\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Color of histogram bars.\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#1781d7'; // average between dark and light accent colors.\n// Minimum number of amplitude bars to draw.\nconst MIN_PREVIEW_LENGTH = 16;\n\nconst messages = defineMessages({\n icon_title_play: {\n id: 'icon_title_play',\n defaultMessage: 'Play recording',\n description: 'Icon tool tip for starting audio playback'\n }\n});\n\nclass AudioPlayer extends React.PureComponent {\n constructor(props) {\n super(props);\n\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n\n this.state = {\n canPlay: false,\n playing: false,\n currentTime: '0:00',\n duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\n longMin: this.props.duration >= 600000,\n preview: preview\n };\n\n this.initAudio = this.initAudio.bind(this);\n this.initCanvas = this.initCanvas.bind(this);\n this.resampleBars = this.resampleBars.bind(this);\n this.visualize = this.visualize.bind(this);\n\n this.handlePlay = this.handlePlay.bind(this);\n this.handleSeek = this.handleSeek.bind(this);\n this.handleError = this.handleError.bind(this);\n\n this.audioPlayer = null;\n\n this.viewBuffer = [];\n this.canvasRef = React.createRef();\n }\n\n componentDidMount() {\n if (this.props.src) {\n this.initAudio();\n }\n\n this.initCanvas();\n }\n\n componentWillUnmount() {\n if (this.audioPlayer) {\n this.audioPlayer.onloadedmetadata = null;\n this.audioPlayer.ontimeupdate = null;\n this.audioPlayer.onended = null;\n this.audioPlayer.pause();\n this.audioPlayer = null;\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.src != prevProps.src) {\n this.initAudio();\n }\n\n if (this.props.preview != prevProps.preview) {\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n this.setState({preview: preview}, this.initCanvas);\n }\n }\n\n initAudio() {\n this.audioPlayer = new Audio(this.props.src);\n this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\n this.audioPlayer.ontimeupdate = _ => this.setState({\n currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\n });\n this.audioPlayer.onended = _ => {\n this.audioPlayer.currentTime = 0;\n this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\n }\n }\n\n initCanvas() {\n // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\n this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n this.canvasContext = this.canvasRef.current.getContext('2d');\n this.canvasContext.lineCap = 'round';\n\n this.viewBuffer = this.resampleBars(this.state.preview);\n this.visualize();\n }\n\n // Draw amplitude of sound.\n visualize() {\n if (!this.canvasRef.current) {\n return;\n }\n\n const width = this.effectiveWidth;\n const height = this.canvasRef.current.height;\n\n this.canvasContext.lineWidth = LINE_WIDTH;\n\n const drawFrame = _ => {\n if (!this.canvasRef.current || !this.audioPlayer) {\n // The component is unmounted.\n return;\n }\n\n this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n\n if (this.viewBuffer) {\n if (this.state.playing) {\n window.requestAnimationFrame(drawFrame);\n }\n\n // Current playback position.\n const thumbAt = this.props.duration ?\n Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n\n // Draw amplitude bars.\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n for (let i = 0; i < this.viewBuffer.length; i++) {\n let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n\n const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n if (this.canvasContext.strokeStyle != color) {\n this.canvasContext.stroke();\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = color;\n }\n\n this.canvasContext.moveTo(x, (height - y) * 0.5);\n this.canvasContext.lineTo(x, (height + y) * 0.5);\n }\n // Actually draw the bars on canvas.\n this.canvasContext.stroke();\n\n // Draw thumb.\n if (this.props.duration) {\n this.canvasContext.beginPath();\n this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n this.canvasContext.fillStyle = THUMB_COLOR;\n this.canvasContext.fill();\n }\n }\n }\n\n drawFrame();\n }\n\n // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\n resampleBars(original) {\n const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\n // Remove extra padding on the right due to fractional bar which is not drawn.\n this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n\n if (!Array.isArray(original) || original.length == 0) {\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n const factor = original.length / dstCount;\n let amps = [];\n let maxAmp = -1;\n for (let i=0; i 0) {\n return amps.map(a => a / maxAmp);\n }\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n handlePlay(e) {\n e.preventDefault();\n if (!this.state.canPlay) {\n return;\n }\n\n if (this.state.playing) {\n this.audioPlayer.pause();\n this.setState({playing: false});\n } else if (this.audioPlayer.readyState >= 2) {\n this.audioPlayer.play();\n this.setState({playing: true}, this.visualize);\n }\n }\n\n handleError(err) {\n console.error(err);\n }\n\n handleSeek(e) {\n e.preventDefault();\n if (e.target && this.props.duration) {\n const rect = e.target.getBoundingClientRect();\n const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;\n this.audioPlayer.currentTime = this.props.duration * offset / 1000;\n this.setState({currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)});\n if (!this.state.playing) {\n this.visualize();\n }\n }\n }\n\n render() {\n const playClass = 'material-icons' +\n (this.props.short ? '' : ' large') +\n (this.state.canPlay ? '' : ' disabled');\n const play = (\n {this.state.playing ? 'pause_circle' :\n (this.state.canPlay ? 'play_circle' : 'not_interested')}\n );\n return (
    {this.props.short ?\n <>\n \n {play}\n \n :\n <>\n {play}\n
    \n \n
    {this.state.currentTime}/{this.state.duration}
    \n
    \n \n }\n
    );\n }\n}\n\nexport default injectIntl(AudioPlayer);\n","module.exports = ReactDOM;","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// Chat message describing a video or voice call.\n\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\nexport default class CallMessage extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n const callIcon = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n const title = this.props.incoming ?\n :\n ;\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration = ;\n break;\n case 'declined':\n duration = ;\n break;\n case 'missed':\n duration = this.props.incoming ?\n :\n ;\n break;\n default:\n duration = ;\n break;\n }\n } else {\n duration = {secondsToTime(this.props.duration / 1000)};\n }\n return
    \n
    call
    \n
    \n
    {title}
    \n
    {callIcon} {duration}
    \n
    \n
    ;\n }\n}\n","// The counter of unread messages in the topic.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\n// Props:\n// incoming: true | false.\n// callState: 'busy' | 'declined' | 'disconnected' | 'missed'.\n// duration: (call duration in milliseconds).\nexport default class CallStatus extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const icon2 = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration = ;\n break;\n case 'declined':\n duration = ;\n break;\n case 'missed':\n duration = this.props.incoming ?\n :\n ;\n break;\n default:\n duration = ;\n break;\n }\n } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {\n duration = \n } else {\n duration = {secondsToTime(this.props.duration / 1000)};\n }\n return (\n <>\n
    \n call{icon2}\n
    {duration}\n \n );\n }\n};\n","// Element which shows static video preview:\n// an image with duration and a play button in the middle.\n\nimport React from 'react';\n\nimport { secondsToTime } from '../lib/strformat.js'\n\nexport default class InlineVideo extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.videoRef = React.createRef();\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(e) {\n if (this.props.onClick) {\n // the click target has to be the image element.\n this.props.onClick(e);\n }\n }\n\n render() {\n const duration = secondsToTime(this.props['data-duration'] / 1000);\n const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');\n return (\n
    \n {React.createElement('img', this.props)}\n
    \n {this.props.onClick ?\n play_arrow\n :\n }\n
    \n {duration ?
    {duration}
    : null}\n
    \n );\n }\n};\n","// Image with a placeholder which is replaced when the promise is resolved.\nimport React from 'react';\n\nexport default class LazyImage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',\n style: Object.assign({padding: '4px'}, this.props.style),\n className: this.props.className,\n alt: this.props.alt,\n onClick: this.props.onClick,\n };\n }\n\n componentDidMount() {\n // whenDone is a wrapper around an actual promise to be able to cancel it.\n this.props.whenDone\n .promise\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n }\n\n componentWillUnmount() {\n this.props.whenDone.cancel();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.whenDone != this.props.whenDone) {\n this.setState({src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png', style: {...this.state.style, padding: '4px'}});\n this.props.whenDone\n .promise\n .then(data => this.setState({src: data.src, style: {...this.state.style, padding: 0}}))\n .catch(_ => this.setState({src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'}));\n }\n }\n\n render() {\n return React.createElement('img', this.state);\n }\n};\n","import React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport { TheCard } from 'tinode-sdk';\n\nimport LetterTile from './letter-tile.jsx';\n\nconst messages = defineMessages({\n unknown_name: {\n id: 'unknown_name',\n defaultMessage: 'Unknown',\n description: 'Name to show when the name is missing'\n }\n});\n\nclass TheCardMini extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleDownload = this.handleDownload.bind(this);\n this.handleMessage = this.handleMessage.bind(this);\n }\n\n handleDownload(e) {\n e.preventDefault();\n try {\n const vcard = TheCard.exportVCard(this.props.content);\n const blob = new Blob([vcard], { type: 'text/vcard' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.style.display = 'none';\n a.href = url;\n a.download = (this.props.content.fn || 'contact') + '.vcf';\n document.body.appendChild(a);\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n } catch (err) {\n console.error(\"Failed to download vcard\", err);\n if (this.props.onError) {\n this.props.onError(\"Failed to download vcard\", 'err');\n }\n }\n }\n\n handleMessage(e) {\n // This is handled by the parent component via props.onAction which expects a click event.\n }\n\n render() {\n const card = this.props.content;\n if (!card) {\n return null;\n }\n\n const uid = TheCard.getFirstTinodeID(card);\n const contacts = TheCard.getEmails(card).concat(TheCard.getPhones(card));\n const org = TheCard.getOrg(card);\n return (\n
    \n
    \n
    \n \n
    \n
    \n
    {card.fn || }
    \n {org &&
    {org}
    }\n
    \n
    \n
    \n {uid ?\n <>\n \n \n \n
    \n \n : contacts.length > 0 ?\n <>\n \n \n \n
    \n \n : null\n }\n \n \n \n
    \n
    \n );\n }\n};\n\nexport default injectIntl(TheCardMini);\n","// Image view with progress bar and a cancel button.\nimport React from 'react';\n\nimport FileProgress from './file-progress.jsx';\n\nexport default class UploadingImage extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n
    \n {React.createElement('img', this.props)}\n
    \n \n
    \n
    \n );\n }\n};\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty, TheCard } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx';\nimport TheCardMini from '../widgets/the-card-mini.jsx';\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO,\n REM_SIZE, VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onHandleClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = (e) => this.onHandleClick(e, 'form_button');\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'LN':\n if (attr) {\n // Ensure only safe URL schemes are clickable.\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n }\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = (e) => this.onHandleClick(e, 'quote');\n break;\n case 'TC':\n // TheCard\n el = TheCardMini;\n attr.content = data;\n attr.authorizeURL = this.authorizeURL;\n attr.onChatClick = (e) => this.onHandleClick(e, 'contact_chat');\n attr.onFindClick = (e) => this.onHandleClick(e, 'contact_find');\n values = null;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = (e) => this.onHandleClick(e, 'image');\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of or
    }>\n \n \n :\n null\n }\n
    \n );\n }\n};\n\nexport default injectIntl(TinodeWeb);\n","// Put all packages together.\n// Used to generate umd/index.prod.js\n\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { IntlProvider } from 'react-intl';\n\nimport TinodeWeb from './views/tinode-web.jsx';\nimport HashNavigation from './lib/navigation.js';\n\n// Insert google analytics script and tag if configured.\nif (typeof FIREBASE_INIT != 'undefined' && FIREBASE_INIT && FIREBASE_INIT.measurementId) {\n const head = document.getElementsByTagName('head')[0];\n let script = document.createElement('script');\n script.src = 'https://www.googletagmanager.com/gtag/js?id=' + FIREBASE_INIT.measurementId;\n script.async = true;\n head.prepend(script);\n window.dataLayer = window.dataLayer || [];\n function gtag(){dataLayer.push(arguments);}\n gtag('js', new Date());\n gtag('config', FIREBASE_INIT.measurementId);\n}\n\n// Allow loading translation strings for just one language.\nconst messageLoader = {\n 'ar': _ => import('./i18n.min/ar.json'),\n 'de': _ => import('./i18n.min/de.json'),\n 'en': _ => import('./i18n.min/en.json'),\n 'es': _ => import('./i18n.min/es.json'),\n 'fr': _ => import('./i18n.min/fr.json'),\n 'it': _ => import('./i18n.min/it.json'),\n 'ko': _ => import('./i18n.min/ko.json'),\n 'ro': _ => import('./i18n.min/ro.json'),\n 'ru': _ => import('./i18n.min/ru.json'),\n 'th': _ => import('./i18n.min/th.json'),\n 'uk': _ => import('./i18n.min/uk.json'),\n 'zh': _ => import('./i18n.min/zh.json'),\n 'zh-TW': _ => import('./i18n.min/zh-TW.json')\n};\n\n// List of languages that are written right-to-left.\nconst rtl = ['ar', 'fa', 'he', 'ur'];\n\n// Detect human language to use in the UI:\n// Check parameters from URL hash #?hl=ru, then browser, then use 'en' as a fallback.\nconst { params } = HashNavigation.parseUrlHash(window.location.hash);\nconst language = (params && params.hl) ||\n (navigator.languages && navigator.languages[0]) ||\n navigator.language ||\n navigator.userLanguage ||\n 'en';\n\n// Make sure names like 'en_GB' and 'en-GB' consistently use '-'.\nconst normalized = language.replace('_', '-');\n// Get the base language 'en' from a more specific 'en-US' as a partial fallback.\nconst baseLanguage = normalized.split('-')[0].toLowerCase();\n\n// Try the full locale first, then the locale without the region code, fallback to 'en'.\nconst htmlLang = messageLoader[normalized] ? language : messageLoader[baseLanguage] ? baseLanguage : 'en';\n\nconst html = document.getElementsByTagName('html')[0];\n// Set lang attribute of the HTML element: \nhtml.setAttribute('lang', htmlLang);\nif (rtl.includes(baseLanguage)) {\n // Set right-to-left dir attribute of the HTML element: \n html.setAttribute('dir', 'rtl');\n}\n// Render the app.\nconst root = createRoot(document.getElementById('mountPoint'));\nmessageLoader[htmlLang]().then(messages =>\n root.render(\n \n \n \n));\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","Cropper","React","constructor","props","super","this","state","panX","panY","originX","originY","zoom","minZoom","maxZoom","overlay","cutout","preview","boundingBox","imageWidth","imageHeight","mouseX","mouseY","prevDistance","cutoutRect","bBoxRect","initScaling","bind","onZoom","handleZoom","mouseDown","mouseUp","mouseMove","mouseTouch","positionAll","translate","componentDidMount","current","addEventListener","passive","getBoundingClientRect","width","height","componentWillUnmount","removeEventListener","setState","left","top","onChange","checkBound","currPan","img","delta","nextDiff","Math","min","imgRect","max","e","target","value","imgLeft","imgRight","imgTop","imgBottom","coLeft","coRight","coTop","coBottom","touches","pageX","pageY","window","document","body","style","dX","dY","right","bottom","preventDefault","length","touch0","touch1","distance","sqrt","scale","render","t3d","orig","className","ref","src","source","alt","transform","transformOrigin","onLoad","type","step","AvatarCrop","handleSubmit","handleChange","imageCrop","mime","avatar","then","onSubmit","blob","catch","err","onError","onCancel","onClick","FormattedMessage","id","defaultMessage","PACKAGE_VERSION","icon_mapping","ContactBadges","badges","forEach","b","color","icon","push","key","name","messages","defineMessages","badge_verified","badge_staff","badge_danger","BadgeList","formatMessage","intl","trustedBadges","comment","short","injectIntl","LoadSpinner","large","clear","centered","show","CheckBox","checked","iconName","classList","Array","isArray","attrs","join","ErrorPanel","hide","componentDidUpdate","prevProps","level","onClearError","warn","info","text","action","href","whiteSpace","actionText","MenuCancel","InPlaceEdit","selfRef","active","initialValue","valid","handeTextChange","handleKeyDown","handleStartEditing","handleEditingFinished","handlePasswordFinished","prevState","newValue","validator","Promise","resolve","keyCode","readOnly","_","focus","event","trim","required","checkValidity","onFinished","spanText","spanClass","placeholder","multiline","iconLeft","iconRight","element","attr","VisiblePassword","rows","maxLength","onKeyDown","onBlur","autoComplete","autoFocus","undefined","spellCheck","module","exports","TagManager","tags","alias","Tinode","tagByPrefix","TAG_ALIAS","tagInput","activated","handleTagInput","handleAddTag","handleRemoveTag","handleCancel","getDerivedStateFromProps","nextProps","arrayEqual","last","substring","tag","maxTagCount","tinode","getServerParam","MAX_TAG_COUNT","slice","onTagsChanged","index","splice","setUniqueTag","minTagLength","MIN_TAG_LENGTH","maxTagLength","MAX_TAG_LENGTH","user","invalid","title","add_tags_prompt","ChipInput","chips","avatarDisabled","prompt","tabIndex","onEnter","onFocusLost","onChipRemoved","filterFunc","updateFavicon","count","oldIcon","getElementById","head","getElementsByTagName","newIcon","createElement","rel","removeChild","appendChild","theCard","fn","imageUrl","imageMimeType","note","card","DEL_CHAR","mimeType","matches","exec","photo","data","indexOf","a","sort","i","l","asPhone","val","test","replaceAll","asEmail","isUrlRelative","url","replace","sanitizeUrl","allowedSchemes","schemes","RegExp","sanitizeUrlForMime","mimeMajor","sanitizedUrl","urlAsAttachment","startsWith","query","fragment","idxF","idxQ","params","URLSearchParams","append","toString","deliveryMarker","received","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","cancelablePromise","promise","hasCanceled","Error","reject","result","isCanceled","error","cancel","defaultWallpaper","wp","require","WALLPAPER_DEFAULTS","path","size","wallpaperNameFromUrl","wallpaperUrl","parts","split","wallpaperTypeFromUrl","fname","wallpaperIndex","CALL_STATE_NONE","CALL_STATE_OUTGOING_INITATED","CALL_STATE_INCOMING_RECEIVED","CALL_STATE_IN_PROGRESS","CALL_HEAD_STARTED","ContactAction","handleClick","stopPropagation","onAction","values","badge_you","badge_owner","ContactList","showCheckmark","topicSelected","contactNodes","contactsCount","showSelfTopic","selected","Contact","showMode","onSelected","onTopicSelected","showContextMenu","item","contacts","c","topic","filter","filterOn","private","toLowerCase","public","isChannel","isChannelTopicName","isGroup","isGroupTopicName","myUserId","acs","isOwner","forwarded","previewIsResponse","deliveryStatus","latestMessage","msg","_status","msgStatus","from","content","substr","MESSAGE_PREVIEW_LENGTH","Drafty","makeImageUrl","unread","showUnread","now","online","connected","pinned","showOnline","isVerified","trusted","verified","isStaff","staff","isDangerous","danger","deleted","_deleted","noScroll","dangerouslySetInnerHTML","__html","emptyListMessage","BAR_COLOR_DARK","icon_title_play","AudioPlayer","base64ToIntArray","canPlay","playing","currentTime","duration","secondsToTime","longMin","initAudio","initCanvas","resampleBars","visualize","handlePlay","handleSeek","handleError","audioPlayer","viewBuffer","canvasRef","onloadedmetadata","ontimeupdate","onended","pause","Audio","offsetWidth","offsetHeight","canvasContext","getContext","lineCap","effectiveWidth","lineWidth","drawFrame","clearRect","requestAnimationFrame","thumbAt","LINE_WIDTH","beginPath","strokeStyle","x","y","stroke","moveTo","lineTo","arc","PI","fillStyle","fill","original","dstCount","apply","map","factor","amps","maxAmp","lo","hi","amp","j","readyState","play","console","rect","offset","clientX","playClass","ReactDOM","m","createRoot","hydrateRoot","CallMessage","isCallDropped","includes","callState","successClass","callIcon","incoming","CallStatus","icon2","InlineVideo","videoRef","LazyImage","isvideo","Object","assign","padding","whenDone","unknown_name","TheCardMini","handleDownload","handleMessage","vcard","TheCard","exportVCard","Blob","URL","createObjectURL","display","download","click","revokeObjectURL","uid","getFirstTinodeID","getEmails","concat","getPhones","org","getOrg","LetterTile","authorizeURL","getPhotoUrl","onChatClick","onFindClick","UploadingImage","FileProgress","progress","onCancelUpload","drafty_form","drafty_attachment","drafty_image","drafty_video","drafty_unknown","fullFormatter","stack","quoteFormatter","call","el","tagName","attrValue","loading","handleImageData","onHandleClick","inner","child","CLICKABLE_URL_SCHEMES","idToColorClass","handleVideoData","IMAGE_THUMBNAIL_DIM","dim","fitImageSize","viewportWidth","REM_SIZE","dstWidth","BROKEN_IMAGE_SIZE","dstHeight","minWidth","minHeight","isProcessing","NO_DIMENSIONS_VIDEO","previewFormatter","isFormResponseType","getFn","inlineImageAttr","maxWidth","maxHeight","inlineVideoAttr","VIDEO_THUMBNAIL_WIDTH","shortenFileName","quoteImageOrVideo","isVideo","bits","premime","preref","base64ToBlob","fetch","evt","ok","status","statusText","imageScaled","scaled","blobToBase64","b64","replyFormatter","loadedPromise","message","Chip","noAvatar","deriveStateFromProps","input","focused","handleTextInput","removeChipAt","handleChipCancel","handleFocusGained","handleFocusLost","sortedChips","sortChips","staticMembers","chipIndex","indexChips","keep","normal","idx","removed","at","onFocus","UnreadBadge","self_topic_name","self_topic_comment","handleContextClick","topicName","topicTitle","self","isSelfTopicName","truncateString","icon_badges","getMode","isMuted","isJoiner","isValid","format","marker","titleClass","bgColor","small","SUPPORTED_IMAGE_FORMATS","MIME_EXTENSIONS","forceSquare","srcWidth","srcHeight","xoffset","yoffset","fileNameForMime","ext","lastIndexOf","fileOrBlob","maxSize","Image","crossOrigin","onerror","onload","async","canvas","ctx","imageSmoothingEnabled","drawImage","toBlob","objURL","fileToBase64","file","reader","FileReader","readAsDataURL","filePasted","onImageSuccess","onAttachmentSuccess","items","clipboardData","originalEvent","kind","getAsFile","base64ReEncode","str","btoa","atob","bin","buf","ArrayBuffer","arr","Uint8Array","charCodeAt","intArrayToBase64","String","fromCharCode","importVCard","readAsText","inputRef","visible","handleVisibility","currentTarget","setTimeout","contains","activeElement","SELF_AVATAR_URI","iconColor","letter","charAt","HashNavigation","parseUrlHash","hash","arg","eq","decodeURIComponent","navigateTo","location","composeUrlHash","args","hasOwnProperty","encodeURIComponent","addUrlParam","parsed","removeUrlParam","removeUrlParams","keys","setUrlSidePanel","sidepanel","setUrlInfoPanel","infopanel","setUrlTopic","alias_invalid","alias_already_taken","TopicDescEdit","getTopic","getAccessMode","isSelf","isMe","isMeTopicName","owner","fullName","description","newAvatar","newAvatarMime","aliasError","previousOnTags","aliasCheckTimer","aliasCheckPromise","tnNewTags","handleFullNameUpdate","handleImageUpdated","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handlePrivateUpdate","handleAliasUpdate","handleDescriptionUpdate","handleTagsUpdated","validateAlias","cancelValidator","onTagsUpdated","MAX_TITLE_LENGTH","onUpdateTopicDesc","desc","MAX_TOPIC_DESCRIPTION_LENGTH","readyToUpload","image","MAX_AVATAR_BYTES","getLargeFileHelper","upload","du","AVATAR_SIZE","MAX_EXTERN_ATTACHMENT_SIZE","clearTagPrefix","isValidTagValue","fnd","getFndTopic","validationPromise","checkTagUniqueness","clearTimeout","onUpdateTags","editable","find","t","AvatarUpload","onImageUpdated","full_name_placeholder","group_name_placeholder","private_placeholder","title_tag_manager","TopicCommonView","previousTagsUpdated","getType","onUpdateTagsRequest","ReactIntl","LocalStorageUtil","setObject","localStorage","setItem","JSON","stringify","getObject","getItem","parse","updateObject","oldVal","removeItem","shortDateFormat","locale","navigator","userLanguage","language","Date","getFullYear","getMonth","getDate","toLocaleTimeString","hour12","hour","minute","toLocaleDateString","month","day","year","relativeDateFormat","diff","floor","getTime","getTimezoneOffset","abs","Intl","RelativeTimeFormat","numeric","DateTimeFormat","seconds","fixedMin","hours","sec","bytesToHumanSize","bytes","sizes","bucket","log2","pow","round","toFixed","filename","light","fg","userId","stringToColorHash","flagEmoji","countryCode","codePoints","toUpperCase","char","fromCodePoint","APP_NAME","API_KEY","KNOWN_HOSTS","hosted","local","DEFAULT_HOST","LOGGING_ENABLED","KEYPRESS_DELAY","READ_DELAY","DEFAULT_P2P_ACCESS_MODE","NO_ACCESS_MODE","MEDIA_BREAKPOINT","MESSAGES_PAGE","MAX_INBAND_ATTACHMENT_SIZE","MAX_IMAGE_DIM","IMAGE_PREVIEW_DIM","VIDEO_PREVIEW_DIM","MAX_ONLINE_IN_TOPIC","MAX_PEER_TITLE_LENGTH","QUOTED_REPLY_LENGTH","FORWARDED_PREVIEW_LENGTH","EDIT_PREVIEW_LENGTH","MIN_DURATION","MAX_DURATION","LINK_CONTACT_US","LINK_PRIVACY_POLICY","LINK_TERMS_OF_SERVICE","IMMEDIATE_P2P_SUBSCRIPTION","QRCODE_SIZE","WAKE_UP_TIMEOUT","WAKE_UP_TICK","MIN_SWIPE_DISTANCE","TOAST_DURATION","DEFAULT_COLOR_SCHEME","DEFAULT_TEXT_SIZE","DRAFTY_FR_MIME_TYPE_LEGACY","handleFileReceived","files","randId","random","accept","htmlFor","uploading","QRCode","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","getPrototypeOf","obj","__proto__","mode","ns","create","r","def","getOwnPropertyNames","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","prop","prototype","done","script","needAttach","scripts","s","getAttribute","charset","nc","setAttribute","onScriptComplete","prev","timeout","doneFns","parentNode","Symbol","toStringTag","p","installedChunks","installedChunkData","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","stringToByteArray$1","out","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","encodeByteArray","webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","pos","c1","c2","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","DecodeBase64StringError","arguments","base64urlEncodeWithoutPadding","utf8Bytes","base64Encode","base64Decode","getDefaultsFromGlobal","getGlobal","__FIREBASE_DEFAULTS__","getDefaults","process","env","defaultsJsonString","getDefaultsFromEnvVariable","match","cookie","decoded","getDefaultsFromCookie","getDefaultAppConfig","_a","config","Deferred","wrapCallback","callback","isIndexedDBAvailable","indexedDB","validateIndexedDBOpenable","preExist","DB_CHECK_NAME","open","onsuccess","close","deleteDatabase","onupgradeneeded","FirebaseError","code","customData","setPrototypeOf","captureStackTrace","ErrorFactory","service","serviceName","errors","fullCode","template","PATTERN","replaceTemplate","fullMessage","deepEqual","aKeys","bKeys","k","aProp","bProp","isObject","thing","getModularInstance","_delegate","Component","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setMultipleInstances","setServiceProps","setInstanceCreatedCallback","DEFAULT_ENTRY_NAME","Provider","container","component","instances","Map","instancesDeferred","instancesOptions","onInitCallbacks","identifier","normalizedIdentifier","normalizeInstanceIdentifier","has","deferred","set","isInitialized","shouldAutoInitialize","instance","getOrInitializeService","instanceIdentifier","getImmediate","options","optional","getComponent","setComponent","isComponentEager","instanceDeferred","entries","clearInstance","delete","services","INTERNAL","_delete","isComponentSet","getOptions","initialize","opts","onInit","existingCallbacks","Set","add","existingInstance","invokeOnInitCallbacks","callbacks","providers","addComponent","provider","getProvider","addOrOverwriteComponent","getProviders","LogLevel","levelStringToEnum","DEBUG","VERBOSE","INFO","WARN","ERROR","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","logLevel","toISOString","method","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","receiver","IDBTransaction","objectStoreNames","objectStore","wrap","wrapFunction","func","IDBDatabase","transaction","IDBCursor","advance","continue","continuePrimaryKey","unwrap","storeNames","tx","transformCachableValue","unlisten","complete","DOMException","cacheDonePromiseForTransaction","object","IDBObjectStore","IDBIndex","Proxy","IDBRequest","success","promisifyRequest","openDB","version","blocked","upgrade","blocking","terminated","openPromise","oldVersion","newVersion","db","deleteDB","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","storeName","store","shift","oldTraps","PlatformLoggerServiceImpl","getPlatformInfoString","isVersionServiceProvider","library","logString","name$q","version$1","logger","_logLevel","_logHandler","_userLogHandler","TypeError","setLogLevel","logHandler","userLogHandler","debug","log","name$p","name$o","name$n","name$m","name$l","name$k","name$j","name$i","name$h","name$g","name$f","name$e","name$d","name$c","name$b","name$a","name$9","name$8","name$7","name$6","name$5","name$4","name$3","name$2","name$1","PLATFORM_LOG_STRING","_apps","_serverApps","_components","_addComponent","app","_registerComponent","componentName","serverApp","heartbeatController","triggerHeartbeat","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_options","_config","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","_container","checkDestroyed","isDeleted","appName","initializeApp","rawConfig","existingApp","newApp","registerVersion","libraryKeyOrName","variant","libraryMismatch","versionMismatch","warning","STORE_NAME","dbPromise","getDbPromise","createObjectStore","originalErrorMessage","writeHeartbeatsToIndexedDB","heartbeatObject","put","computeKey","idbGetError","appId","HeartbeatServiceImpl","_heartbeatsCache","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","read","_b","agent","date","getUTCDateString","heartbeats","lastSentHeartbeatDate","singleDateHeartbeat","earliestHeartbeatIdx","earliestHeartbeatDate","getEarliestHeartbeatIdx","overwrite","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","heartbeatsCache","heartbeatEntry","hb","dates","countBytes","pop","extractHeartbeatsForHeader","headerString","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","idbHeartbeatObject","readHeartbeatsFromIndexedDB","heartbeatsObject","existingHeartbeatsObject","PENDING_TIMEOUT_MS","INTERNAL_AUTH_VERSION","TOKEN_EXPIRATION_BUFFER","isServerError","getInstallationsEndpoint","projectId","extractAuthTokenInfoFromResponse","response","token","requestStatus","expiresIn","responseExpiresIn","Number","creationTime","getErrorFromResponse","requestName","errorData","json","serverCode","serverMessage","serverStatus","getHeaders","apiKey","Headers","Accept","getHeadersWithAuth","appConfig","refreshToken","headers","getAuthorizationHeader","retryIfServerError","sleep","ms","VALID_FID_PATTERN","generateFid","fidByteArray","crypto","msCrypto","getRandomValues","fid","b64String","array","encode","getKey","fidChangeCallbacks","fidChanged","callFidChangeCallbacks","channel","getBroadcastChannel","postMessage","closeBroadcastChannel","broadcastFidChange","broadcastChannel","BroadcastChannel","onmessage","OBJECT_STORE_NAME","oldValue","remove","update","updateFn","getInstallationEntry","installations","registrationPromise","installationEntry","oldEntry","entry","registrationStatus","clearTimedOutRequest","updateOrCreateInstallationEntry","entryWithPromise","onLine","inProgressEntry","registrationTime","registeredInstallationEntry","heartbeatServiceProvider","endpoint","heartbeatService","heartbeatsHeader","authVersion","sdkVersion","responseValue","authToken","createInstallationRequest","registerInstallation","waitUntilFidRegistration","triggerRegistrationIfNecessary","updateInstallationRequest","generateAuthTokenRequest","getGenerateAuthTokenEndpoint","installation","refreshAuthToken","forceRefresh","tokenPromise","isEntryRegistered","oldAuthToken","isAuthTokenExpired","isAuthTokenValid","updateAuthTokenRequest","waitUntilAuthTokenRequest","inProgressAuthToken","requestTime","makeAuthTokenRequestInProgressEntry","updatedInstallationEntry","fetchAuthTokenFromServer","getToken","installationsImpl","completeInstallationRegistration","getMissingValueError","valueName","INSTALLATIONS_NAME","internalFactory","getId","configKeys","keyName","extractAppConfig","DEFAULT_VAPID_KEY","CONSOLE_CAMPAIGN_ID","DEFAULT_REGISTRATION_TIMEOUT","MessageType$1","MessageType","arrayToBase64","uint8Array","base64ToArray","base64String","repeat","rawData","outputArray","OLD_DB_NAME","OLD_OBJECT_STORE_NAME","upgradeDb","dbGet","firebaseDependencies","tokenDetails","oldTokenDetails","senderId","dbNames","databases","upgradeTransaction","oldDetails","auth","p256dh","fcmToken","createTime","subscriptionOptions","swScope","vapidKey","checkTokenDetails","migrateOldDatabase","dbSet","requestDeleteToken","unsubscribeOptions","getEndpoint","responseData","errorInfo","getBody","web","applicationPubKey","getTokenInternal","messaging","pushSubscription","swRegistration","subscription","pushManager","getSubscription","subscribe","userVisibleOnly","applicationServerKey","getPushSubscription","scope","dbOptions","currentOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","isTokenValid","updatedToken","updateOptions","requestUpdateToken","updatedTokenDetails","updateToken","getNewToken","deleteTokenInternal","dbRemove","unsubscribe","subscribeOptions","requestGetToken","externalizePayload","internalPayload","payload","collapseKey","collapse_key","messageId","fcmMessageId","messagePayloadInternal","notification","propagateNotificationPayload","propagateDataPayload","_c","_d","_e","fcmOptions","click_action","link","analyticsLabel","analytics_label","propagateFcmOptions","s1","s2","resultArray","_mergeStrings","MessagingService","analyticsProvider","deliveryMetricsExportedToBigQueryEnabled","onBackgroundMessageHandler","onMessageHandler","logEvents","isLogServiceStarted","messagingSenderId","registerDefaultSw","serviceWorker","register","registration","rejectTimeout","incomingSw","installing","waiting","onstatechange","ev","waitForRegistrationActive","browserErrorMessage","getToken$1","Notification","permission","requestPermission","updateVapidKey","ServiceWorkerRegistration","updateSwReg","serviceWorkerRegistration","logToScion","messageType","eventType","NOTIFICATION_CLICKED","PUSH_RECEIVED","getEventType","logEvent","message_id","message_name","message_time","message_device_time","messageEventListener","isFirebaseMessaging","next","dataPayload","WindowMessagingInternalFactory","isWindowSupported","cookieEnabled","PushSubscription","getMessagingInWindow","isSupported","deleteToken","deleteToken$1","onMessage","nextOrObserver","onMessage$1","Alert","onReject","onConfirm","confirm","clear_messages","clear_for_all","delete_for_all","send_retry","mute","unmute","reply","forward","edit","topic_delete","topic_delete_warning","delete_messages_warning","unblock","block","topic_block_warning","member_delete","archive","unarchive","edit_permissions","clear_messages_warning","pin_message","unpin_message","pin_chat","unpin_chat","ContextMenu","handlePageClick","handleEscapeKey","MenuItems","handler","errorHandler","onShowAlert","deleteMessages","retryMessage","replyToMessage","editMessage","pinMessage","topicPermissionSetter","ctrl","onTopicRemoved","delTopic","me","getMeTopic","pinTopic","delSubscription","dataset","hard","cancelSend","seq","delMessagesAll","delMessagesEdits","delMessagesList","flushMessage","createMessage","publishDraft","pin","updateMode","pickReply","userFrom","userName","menu","disabled","hSize","vSize","position","bounds","clickAt","SearchContacts","edited","search","initialQuery","handleSearchChange","handleSearch","handleClear","onSearchContacts","ForwardDialog","handleClose","handleSearchContacts","handleContactSelected","onInitFind","isNullValue","searchResults","isWriter","desription","search_placeholder","not_found_placeholder","RING_SOUND","CallIncoming","previousMetaDesc","resetDesc","onMetaDesc","handleRejectCall","handleAcceptCall","ringTimer","setInterval","onRinging","clearInterval","onAcceptCall","onClose","ButtonBack","onBack","MenuContacts","onNewTopic","onSettings","MenuStart","onSignUp","SideNavbar","archived_contacts_title","ContactsView","handleAction","unreadThreads","archivedCount","chatList","pinnedTopicRank","arch","touched","contactList","newState","action_ignored","onShowArchive","no_contacts","AccGeneralView","colorSchema","textSize","sendOnEnter","isMac","userAgentData","platform","handleColorSchemaSelected","handleTextSizeChanged","handleSendOnEnterSelected","onChangeColorSchema","onTextSizeChanged","onSendOnEnterChanged","verticalAlign","onSelectWallpapers","list","label","AccNotificationsView","handleCheckboxClick","what","onToggleMessageSounds","onTogglePushNotifications","messageSounds","desktopAlertsEnabled","desktopAlerts","AccSupportView","getLibrary","serverVersion","serverAddress","LoginView","login","password","hostName","saveToken","persist","handleLoginChange","handlePasswordChange","handleToggleSaveToken","onPersistenceChange","onLogin","submitClasses","login_prompt","autoCorrect","autoCapitalize","password_prompt","invalid_id","NewTopicById","qrCodeRef","groupId","handleKeyPress","myURI","prefix","NewTopicGroup","handleFieldEdit","handleImageChanged","handleTagsChanged","handleChannelToggle","search_for_contacts","search_no_results","NewTopicView","urlParams","initialTab","tabSelected","searchQuery","handleTabClick","handleSearchResultSelected","handleNewGroupSubmit","handleGroupByID","email","TAG_EMAIL","tel","TAG_PHONE","onCreateTopic","dataUrl","priv","no_contacts_placeholder","URI_TOPIC_ID_PREFIX","getCurrentUserID","HostSelector","changed","handleHostNameChange","onServerAddressChange","hostOptions","SettingsView","transport","secureConnection","handleTransportSelected","handleServerAddressChange","handleToggleSecure","onUpdate","names","ws","lp","transportOptions","phone","ValidationView","credCode","codeReceived","handleCodeChange","credMethod","credToken","numbers_only","AccountSettingsView","CreateAccountView","AccSecurityView","PasswordResetView","WallpapersView","settings","general","security","crop","notif","acc_general","support","newtpk","cred","reset","wallpapers","SidepanelView","handleNewTopic","onNavigate","view","errorLevel","errorText","errorAction","errorActionText","loadSpinnerVisible","loginDisabled","onLoginRequest","Suspense","fallback","reqCredMethod","onShowCountrySelector","onCreateAccount","onGlobalSettings","onCredAdd","onCredDelete","onCredConfirm","onUpdateAccountDesc","onUpdateAccountTags","incognitoMode","onUpdatePassword","onLogout","onDeleteAccount","onShowBlocked","onToggleIncognitoMode","wallpaper","wallpaperSize","wallpaperBlur","systemColorSchema","onWallpaperSelected","onValidateCredentials","onRequest","onPasswordResetRequest","onReset","onResetPassword","detectServerAddress","host","protocol","hostname","port","isSecureConnection","PhoneCountrySelector","InfoView","MessagesView","POP_SOUND","reconnect_countdown","reconnect_now","push_init_failed","invalid_security_token","no_connection","code_doesnot_match","menu_item_info","menu_item_audio_call","menu_item_video_call","cred_confirmed_successfully","password_reset_success","select_country","TinodeWeb","getBlankState","handleResize","handleHashRoute","handleOnline","handleColorSchemeChange","checkForAppUpdate","handleVisibilityEvent","handleLoginRequest","handlePersistenceChange","handleConnected","handleAutoreconnectIteration","doLogin","handleLoginSuccessful","handleDisconnect","tnMeMetaDesc","tnMeContactUpdate","tnMeSubsUpdated","resetContactList","tnInitFind","tnFndSubsUpdated","handleTopicSelected","handleHideMessagesView","handleSendMessage","handleNewChatInvitation","handleNewAccount","handleNewAccountRequest","handleUpdatePasswordRequest","handleUpdateAccountTagsRequest","handleToggleIncognitoMode","handleChangeColorSchema","handleChangeTextSize","handleSendOnEnter","handleSelectWallpapers","handleWallpaperSelected","handleSettings","handleGlobalSettings","handleShowArchive","handleShowBlocked","handleToggleMessageSounds","handleCredAdd","handleCredDelete","handleCredConfirm","initFCMessaging","toggleFCMToken","handlePushMessage","handleSidepanelCancel","handleStartTopicRequest","handleNewTopicCreated","handleTopicUpdateRequest","handleUnarchive","handleChangePermissions","handleTagsUpdateRequest","handleLogout","handleDeleteAccount","handleDeleteTopicRequest","handleDeleteMessagesRequest","handleLeaveUnsubRequest","handleBlockTopicRequest","handleReportTopic","handleShareTheCard","handleShowContextMenu","defaultTopicContextMenu","handleHideContextMenu","handleShowAlert","handleShowInfoView","handleMemberUpdateRequest","handleValidateCredentialsRequest","handlePasswordResetRequest","handleResetPassword","handleContextMenuAction","handleShowCountrySelector","handleShowForwardDialog","handleHideForwardDialog","handleStartVideoCall","handleStartAudioCall","handleInfoMessage","handleDataMessage","handleCallClose","handleCallInvite","handleCallRinging","handleCallHangup","handleCallSendOffer","handleCallIceCandidate","handleCallSendAnswer","handleCallAccept","sendMessageToTopic","callTimeoutTimer","ready","autoLogin","messageSoundsOff","matchMedia","firebaseInitApp","FIREBASE_INIT","firebaseToken","applicationVisible","hidden","sidePanelSelected","sidePanelTitle","sidePanelAvatar","myTrustedBadges","liveConnection","topicSelectedOnline","topicSelectedAcs","newTopicParams","displayMobile","innerWidth","infoPanel","mobilePanel","callTopic","callAudioOnly","callShouldStart","contextMenuVisible","contextMenuBounds","contextMenuClickAt","contextMenuParams","contextMenuItems","forwardDialogVisible","forwardMessage","alertVisible","alertParams","searchableContacts","requestedTopic","handleOnlineOn","handleOnlineOff","documentElement","colorScheme","setProperty","applyWallpaperSettings","lastWakeUpCheck","wakeUpTicker","clientWidth","viewportHeight","clientHeight","tnSetup","onConnect","onDisconnect","onAutoreconnectIteration","onInfoMessage","onDataMessage","expires","setAuthToken","connect","parsedNav","cred_done","persistentCache","onSetupCompleted","secure","setHumanLanguage","enableLogging","oobNotification","fcm","firebaseGetMessaging","getRegistration","reg","requestFCMToken","setDeviceToken","firebaseOnMessage","sw","firebaseGetToken","messagingVapidKey","mobile","onupdatefound","installingWorker","controller","newTopicTabSelected","tab","topicType","getTopicAccessMode","stateForError","reconnectCountdown","reconnect","isConnected","meth","resp","initStorage","clearStorage","getServerInfo","ver","build","reqCred","prom","fmtTime","tmpToken","isAuthenticated","getAuthToken","credential","loginPromise","connectionPromise","loginBasic","loginToken","navigateToCredentialsView","goToTopic","onContactUpdate","onSubsUpdated","startMetaQuery","withLaterSub","withDesc","withTags","withCred","disconnect","finally","urlHash","isPresencer","checkIfPinsUpdated","cont","archived","isArchived","unused","prepareSearchableContacts","foundContacts","merged","isP2PTopicName","updated","past","pins","isSubscribed","withSub","setMeta","getMeta","_topicName","isTopicOnline","uploadCompletionPromise","uploader","_uploader","completion","subscribePromise","calls","queuedMessages","pub","_sending","webrtc","publishMessage","getGiven","sub","isP2PType","am","updateWant","getWant","login_","password_","public_","cred_","tags_","attachments","createAccountBasic","on","schema","applyColorSchema","systemSchema","effectiveSchema","blur","option","enabled","firebaseDelToken","delCredential","scheme","basicNavigator","infoNavigator","isTopicCached","defacs","newGroupTopicName","oldName","newName","nextState","updateAccountBasic","getCurrentLogin","updateGiven","cleared","Promose","delCurrentUser","leave","report","menuItems","header","init","forwardedContent","appendLineBreak","mention","msgPreview","quote","contentType","muted","self_blocked","subscribed","deleter","writer","p2p","isDeleter","keepForwardedMessage","confirmText","rejectText","added","invite","requestResetAuthSecret","newPassword","tempAuth","secret","dial","selectedCallback","callSeq","audioOnly","aonly","videoCall","sdp","candidate","setCallTopic","upd","latestMsgVersion","myUserName","onCancelForwardMessage","onCallHangup","onCallInvite","onCallSendOffer","onCallIceCandidate","onCallSendAnswer","onHideMessagesView","onNewTopicCreated","onChangePermissions","onNewChat","sendMessage","onVideoCallClosed","panel","onTopicDescUpdateRequest","onMemberUpdateRequest","onDeleteTopic","onDeleteMessages","onLeaveTopic","onBlockTopic","onReportTopic","onShareTheCard","onTopicTagsUpdateRequest","onTopicUnArchive","measurementId","gtag","dataLayer","prepend","messageLoader","hl","languages","normalized","baseLanguage","htmlLang","html","root","IntlProvider","textComponent"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/tinode.dev.js b/umd/tinode.dev.js index 21da7f76..14a9ba44 100644 --- a/umd/tinode.dev.js +++ b/umd/tinode.dev.js @@ -384,9 +384,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ DEL_CHAR: function() { return /* binding */ DEL_CHAR; }, /* harmony export */ EXPIRE_PROMISES_PERIOD: function() { return /* binding */ EXPIRE_PROMISES_PERIOD; }, /* harmony export */ EXPIRE_PROMISES_TIMEOUT: function() { return /* binding */ EXPIRE_PROMISES_TIMEOUT; }, +/* harmony export */ ICE_SERVERS: function() { return /* binding */ ICE_SERVERS; }, /* harmony export */ LIBRARY: function() { return /* binding */ LIBRARY; }, /* harmony export */ LOCAL_SEQID: function() { return /* binding */ LOCAL_SEQID; }, +/* harmony export */ MAX_FILE_UPLOAD_SIZE: function() { return /* binding */ MAX_FILE_UPLOAD_SIZE; }, +/* harmony export */ MAX_MESSAGE_SIZE: function() { return /* binding */ MAX_MESSAGE_SIZE; }, /* harmony export */ MAX_PINNED_COUNT: function() { return /* binding */ MAX_PINNED_COUNT; }, +/* harmony export */ MAX_SUBSCRIBER_COUNT: function() { return /* binding */ MAX_SUBSCRIBER_COUNT; }, +/* harmony export */ MAX_TAG_COUNT: function() { return /* binding */ MAX_TAG_COUNT; }, +/* harmony export */ MAX_TAG_LENGTH: function() { return /* binding */ MAX_TAG_LENGTH; }, /* harmony export */ MESSAGE_STATUS_FAILED: function() { return /* binding */ MESSAGE_STATUS_FAILED; }, /* harmony export */ MESSAGE_STATUS_FATAL: function() { return /* binding */ MESSAGE_STATUS_FATAL; }, /* harmony export */ MESSAGE_STATUS_NONE: function() { return /* binding */ MESSAGE_STATUS_NONE; }, @@ -396,8 +402,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ MESSAGE_STATUS_SENDING: function() { return /* binding */ MESSAGE_STATUS_SENDING; }, /* harmony export */ MESSAGE_STATUS_SENT: function() { return /* binding */ MESSAGE_STATUS_SENT; }, /* harmony export */ MESSAGE_STATUS_TO_ME: function() { return /* binding */ MESSAGE_STATUS_TO_ME; }, +/* harmony export */ MIN_TAG_LENGTH: function() { return /* binding */ MIN_TAG_LENGTH; }, +/* harmony export */ MSG_DELETE_AGE: function() { return /* binding */ MSG_DELETE_AGE; }, /* harmony export */ PROTOCOL_VERSION: function() { return /* binding */ PROTOCOL_VERSION; }, +/* harmony export */ REACTION_LIST: function() { return /* binding */ REACTION_LIST; }, /* harmony export */ RECV_TIMEOUT: function() { return /* binding */ RECV_TIMEOUT; }, +/* harmony export */ REQ_CRED_VALIDATORS: function() { return /* binding */ REQ_CRED_VALIDATORS; }, /* harmony export */ TAG_ALIAS: function() { return /* binding */ TAG_ALIAS; }, /* harmony export */ TAG_EMAIL: function() { return /* binding */ TAG_EMAIL; }, /* harmony export */ TAG_PHONE: function() { return /* binding */ TAG_PHONE; }, @@ -452,6 +462,16 @@ const TAG_PHONE = 'tel:'; const BACKOFF_BASE = 2000; const BACKOFF_MAX_ITER = 10; const BACKOFF_JITTER = 0.3; +const MAX_MESSAGE_SIZE = 'maxMessageSize'; +const MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount'; +const MIN_TAG_LENGTH = 'minTagLength'; +const MAX_TAG_LENGTH = 'maxTagLength'; +const MAX_TAG_COUNT = 'maxTagCount'; +const MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize'; +const REQ_CRED_VALIDATORS = 'reqCred'; +const MSG_DELETE_AGE = 'msgDelAge'; +const ICE_SERVERS = 'iceServers'; +const REACTION_LIST = 'reactions'; /***/ }), @@ -1119,15 +1139,40 @@ class DB { const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq])); req.onsuccess = event => { const src = req.result || event.target.result; - if (!src || src._status == status) { - trx.commit(); - return; + if (src && src._status != status) { + trx.objectStore('message').put(DB.#serializeMessage(src, { + topic: topicName, + seq: seq, + _status: status + })); + } + trx.commit(); + }; + }); + } + updMessageReact(topicName, seq, react) { + if (!this.isReady()) { + return this.disabled ? Promise.resolve() : Promise.reject(new Error("not initialized")); + } + return new Promise((resolve, reject) => { + const trx = this.db.transaction(['message'], 'readwrite'); + trx.onsuccess = event => { + resolve(event.target.result); + }; + trx.onerror = event => { + this.#logger('PCache', 'updMessageReact', event.target.error); + reject(event.target.error); + }; + const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq])); + req.onsuccess = event => { + const src = req.result || event.target.result; + if (src && src.react !== react) { + trx.objectStore('message').put(DB.#serializeMessage(src, { + topic: topicName, + seq: seq, + react: react + })); } - trx.objectStore('message').put(DB.#serializeMessage(src, { - topic: topicName, - seq: seq, - _status: status - })); trx.commit(); }; }); @@ -1329,7 +1374,7 @@ class DB { }; }); } - static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq', 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted']; + static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq', 'clear', 'mrrid', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted', '_mrrSeen']; static #deserializeTopic(topic, src) { DB.#topic_fields.forEach(f => { if (src.hasOwnProperty(f)) { @@ -1377,7 +1422,7 @@ class DB { return res; } static #serializeMessage(dst, msg) { - const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content']; + const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content', 'react']; const res = dst || {}; fields.forEach(f => { if (msg.hasOwnProperty(f)) { @@ -1400,7 +1445,7 @@ class DB { /***/ (function(module) { /** - * @copyright 2015-2024 Tinode LLC. + * @copyright 2015-2026 Tinode LLC. * @summary Minimally rich text representation and formatting for Tinode. * @license Apache 2.0 * @@ -1460,7 +1505,7 @@ const MAX_PREVIEW_DATA_SIZE = 64; const DRAFTY_MIME_TYPE = 'text/x-drafty'; const DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr'; const DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; -const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width']; +const ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'fn', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width']; const segmenter = new Intl.Segmenter(); const INLINE_STYLES = [{ name: 'ST', @@ -1597,6 +1642,11 @@ const FORMAT_TAGS = { md_tag: '*', isVoid: false }, + TC: { + html_tag: 'div', + md_tag: undefined, + isVoid: false + }, VC: { html_tag: 'div', md_tag: undefined, @@ -1769,6 +1819,17 @@ const DECORATORS = { return data ? {} : null; } }, + TC: { + open: _ => '
    ', + close: _ => '
    ', + props: data => { + if (!data) return {}; + return { + 'data-fn': data.fn, + 'data-title': data.title + }; + } + }, VC: { open: _ => '
    ', close: _ => '
    ', @@ -2314,6 +2375,24 @@ Drafty.appendLineBreak = function (content) { content.txt += ' '; return content; }; +Drafty.appendTheCard = function (content, theCardData) { + content = content || { + txt: '' + }; + content.ent = content.ent || []; + content.fmt = content.fmt || []; + content.fmt.push({ + at: stringToGraphemes(content.txt).length, + len: 1, + key: content.ent.length + }); + content.txt += ' '; + content.ent.push({ + tp: 'TC', + data: theCardData + }); + return content; +}; Drafty.UNSAFE_toHTML = function (doc) { const tree = draftyToTree(doc); const htmlFormatter = function (type, data, values) { @@ -2573,6 +2652,7 @@ Drafty.attrValue = function (style, data) { Drafty.getContentType = function () { return DRAFTY_MIME_TYPE; }; +Drafty.contentType = DRAFTY_MIME_TYPE; Drafty.isFormResponseType = function (mimeType) { return mimeType === DRAFTY_FR_MIME_TYPE || mimeType === DRAFTY_FR_MIME_TYPE_LEGACY; }; @@ -3296,10 +3376,10 @@ class LargeFileHelper { xhr.upload.onprogress = e => { if (e.lengthComputable) { if (onProgress) { - onProgress(e.loaded / e.total); + onProgress(e.loaded / e.total, data.type || 'application/octet-stream'); } if (this.onProgress) { - this.onProgress(e.loaded / e.total); + this.onProgress(e.loaded / e.total, data.type || 'application/octet-stream'); } } }; @@ -3649,7 +3729,7 @@ class TopicMe extends _topic_js__WEBPACK_IMPORTED_MODULE_2__["default"] { case 'ua': cont.seen = { when: new Date(), - ua: pres.ua + ua: pres.val }; break; case 'recv': @@ -3674,6 +3754,14 @@ class TopicMe extends _topic_js__WEBPACK_IMPORTED_MODULE_2__["default"] { break; case 'del': break; + case 'react': + cont._processMetaReact(undefined, { + mrrid: pres.id2 | 0, + seq: pres.seq, + user: pres.actor, + val: pres.val + }); + break; default: this._tinode.logger("INFO: Unsupported presence update in 'me'", pres.what); } @@ -3930,6 +4018,544 @@ class MetaGetBuilder { /***/ }), +/***/ "./src/the-card.js": +/*!*************************!*\ + !*** ./src/the-card.js ***! + \*************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": function() { return /* binding */ TheCard; } +/* harmony export */ }); +/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/config.js"); + + + +const THE_CARD_MIME_TYPE = 'text/x-the-card'; +class TheCard { + constructor(fn, imageUrl, imageMimeType, note) { + Object.assign(this, theCard(fn, imageUrl, imageMimeType, note) || {}); + } + merge(that) { + Object.assign(this, that); + } + get contentType() { + return THE_CARD_MIME_TYPE; + } + get size() { + return JSON.stringify(this).length; + } +} +TheCard.contentType = THE_CARD_MIME_TYPE; +TheCard.setFn = function (card, fn) { + fn = fn && fn.trim(); + card = card || {}; + card.fn = fn || undefined; + return card; +}; +TheCard.getFn = function (card) { + if (card && card.fn) { + return card.fn; + } + return null; +}; +TheCard.setNote = function (card, note) { + note = note && note.trim(); + card = card || {}; + card.note = note ? note : _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR; + return card; +}; +TheCard.setPhoto = function (card, imageUrl, imageMimeType) { + if (imageUrl) { + card = card || {}; + let mimeType = imageMimeType; + const matches = /^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl); + if (matches) { + mimeType = matches[1]; + card.photo = { + data: imageUrl.substring(imageUrl.indexOf(',') + 1), + ref: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR + }; + } else { + card.photo = { + data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR, + ref: imageUrl + }; + if (!mimeType) { + const ext = /\.([a-z0-9]+)$/i.exec(imageUrl); + if (ext) { + const extLower = ext[1].toLowerCase(); + const mimeMap = { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'bmp': 'image/bmp', + 'webp': 'image/webp', + 'svg': 'image/svg+xml' + }; + mimeType = mimeMap[extLower] || null; + } + } + } + card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length); + } else { + card = card || {}; + card.photo = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR; + } + return card; +}; +TheCard.getPhotoUrl = function (card) { + if (card && card.photo) { + if (card.photo.ref && card.photo.ref != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) { + return card.photo.ref; + } else if (card.photo.data && card.photo.data != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) { + return 'data:image/' + (card.photo.type || 'jpeg') + ';base64,' + card.photo.data; + } + } + return null; +}; +TheCard.getOrg = function (card) { + if (card && card.org) { + return card.org.fn || null; + } + return null; +}; +TheCard.setPhone = function (card, phone, type = 'voice') { + return addOrSetComm(card, 'tel', phone, type, true); +}; +TheCard.setEmail = function (card, email, type = 'home') { + return addOrSetComm(card, 'email', email, type, true); +}; +TheCard.setTinodeID = function (card, tinodeID, type = 'home') { + return addOrSetComm(card, 'tinode', tinodeID, type, true); +}; +TheCard.addPhone = function (card, phone, type = 'voice') { + return addOrSetComm(card, 'tel', phone, type, false); +}; +TheCard.addEmail = function (card, email, type = 'home') { + return addOrSetComm(card, 'email', email, type, false); +}; +TheCard.addTinodeID = function (card, tinodeID, type = 'home') { + return addOrSetComm(card, 'tinode', tinodeID, type, false); +}; +TheCard.clearPhone = function (card, phone, type) { + return clearComm(card, 'tel', phone, type); +}; +TheCard.clearEmail = function (card, email, type) { + return clearComm(card, 'email', email, type); +}; +TheCard.clearTinodeID = function (card, tinodeID, type) { + return clearComm(card, 'tinode', tinodeID, type); +}; +TheCard.getComm = function (card, proto) { + if (card && Array.isArray(card.comm)) { + return card.comm.filter(c => c.proto == proto); + } + return []; +}; +TheCard.getEmails = function (card) { + return TheCard.getComm(card, 'email').map(c => c.value); +}; +TheCard.getPhones = function (card) { + return TheCard.getComm(card, 'tel').map(c => c.value); +}; +TheCard.getFirstTinodeID = function (card) { + const comms = TheCard.getComm(card, 'tinode'); + if (comms.length > 0) { + return comms[0].value; + } + return null; +}; +TheCard.exportVCard = function (card) { + if (!card) { + return null; + } + let vcard = 'BEGIN:VCARD\r\nVERSION:3.0\r\n'; + if (card.fn) { + vcard += `FN:${card.fn}\r\n`; + } + if (card.n) { + vcard += `N:${card.n.surname || ''};${card.n.given || ''};${card.n.additional || ''};${card.n.prefix || ''};${card.n.suffix || ''}\r\n`; + } + if (card.org) { + if (card.org.fn) { + vcard += `ORG:${card.org.fn}\r\n`; + } + if (card.org.title) { + vcard += `TITLE:${card.org.title}\r\n`; + } + } + if (card.note && card.note != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) { + vcard += `NOTE:${card.note}\r\n`; + } + if (card.bday && card.bday.m && card.bday.d) { + const year = card.bday.y ? String(card.bday.y).padStart(4, '0') : '--'; + const month = String(card.bday.m).padStart(2, '0'); + const day = String(card.bday.d).padStart(2, '0'); + vcard += `BDAY:${year}-${month}-${day}\r\n`; + } + if (card.photo) { + if (card.photo.ref && card.photo.ref != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) { + vcard += `PHOTO;VALUE=URI:${card.photo.ref}\r\n`; + } else if (card.photo.data && card.photo.data != _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR) { + vcard += `PHOTO;TYPE=${card.photo.type.toUpperCase()};ENCODING=b:${card.photo.data}\r\n`; + } + } + if (Array.isArray(card.comm)) { + card.comm.forEach(comm => { + const types = comm.des.join(',').toUpperCase(); + if (comm.proto === 'tel') { + vcard += `TEL;TYPE=${types}:${comm.value}\r\n`; + } else if (comm.proto === 'email') { + vcard += `EMAIL;TYPE=${types}:${comm.value}\r\n`; + } else if (comm.proto === 'tinode') { + vcard += `IMPP;TYPE=${types}:${comm.value}\r\n`; + } else if (comm.proto === 'http') { + vcard += `URL;TYPE=${types}:${comm.value}\r\n`; + } + }); + } + vcard += 'END:VCARD\r\n'; + return vcard; +}; +TheCard.importVCard = function (vcardStr) { + if (!vcardStr || typeof vcardStr !== 'string') { + return null; + } + const rawLines = vcardStr.split(/\r\n|\n/); + const lines = []; + let currentLine = ''; + for (let i = 0; i < rawLines.length; i++) { + const line = rawLines[i]; + if (line.startsWith(' ') || line.startsWith('\t')) { + currentLine += line.substring(1); + } else if (currentLine.endsWith('=')) { + currentLine = currentLine.substring(0, currentLine.length - 1) + line; + } else { + if (currentLine) { + lines.push(currentLine); + } + currentLine = line; + } + } + if (currentLine) { + lines.push(currentLine); + } + let card = {}; + const commMap = new Map(); + const unescapeValue = val => { + return val.replace(/\\([,;\\n])/g, (match, char) => { + if (char === 'n') return '\n'; + return char; + }); + }; + const decodeQuotedPrintable = val => { + const bytes = []; + let i = 0; + while (i < val.length) { + if (val[i] === '=' && i + 2 < val.length) { + const hex = val.substring(i + 1, i + 3); + if (/^[0-9A-F]{2}$/i.test(hex)) { + bytes.push(parseInt(hex, 16)); + i += 3; + } else { + bytes.push(val.charCodeAt(i)); + i++; + } + } else { + bytes.push(val.charCodeAt(i)); + i++; + } + } + try { + const uint8Array = new Uint8Array(bytes); + return new TextDecoder('utf-8').decode(uint8Array); + } catch (e) { + return val.replace(/=([0-9A-F]{2})/gi, (match, hex) => { + return String.fromCharCode(parseInt(hex, 16)); + }); + } + }; + lines.forEach(line => { + const [keyPart, ...valueParts] = line.split(':'); + if (!keyPart || valueParts.length === 0) { + return; + } + const value = valueParts.join(':'); + const keyParams = keyPart.split(';'); + const key = keyParams[0].trim().toUpperCase(); + const isQuotedPrintable = keyParams.some(param => param.trim().toUpperCase() === 'QUOTED-PRINTABLE' || param.trim().toUpperCase() === 'ENCODING=QUOTED-PRINTABLE'); + if (key === 'FN') { + let processedValue = value; + if (isQuotedPrintable) { + processedValue = decodeQuotedPrintable(processedValue); + } + card.fn = unescapeValue(processedValue); + } else if (key === 'N') { + let processedValue = value; + if (isQuotedPrintable) { + processedValue = decodeQuotedPrintable(processedValue); + } + const parts = processedValue.split(';'); + card.n = { + surname: parts[0] ? unescapeValue(parts[0]) : undefined, + given: parts[1] ? unescapeValue(parts[1]) : undefined, + additional: parts[2] ? unescapeValue(parts[2]) : undefined, + prefix: parts[3] ? unescapeValue(parts[3]) : undefined, + suffix: parts[4] ? unescapeValue(parts[4]) : undefined + }; + Object.keys(card.n).forEach(key => card.n[key] === undefined && delete card.n[key]); + if (Object.keys(card.n).length === 0) { + delete card.n; + } + } else if (key === 'ORG') { + let processedValue = value; + if (isQuotedPrintable) { + processedValue = decodeQuotedPrintable(processedValue); + } + const parts = processedValue.split(';'); + card.org = card.org || {}; + card.org.fn = parts[0] ? unescapeValue(parts[0]) : undefined; + if (!card.org.fn) delete card.org.fn; + } else if (key === 'TITLE') { + let processedValue = value; + if (isQuotedPrintable) { + processedValue = decodeQuotedPrintable(processedValue); + } + card.org = card.org || {}; + card.org.title = processedValue ? unescapeValue(processedValue) : undefined; + if (!card.org.title) delete card.org.title; + } else if (key === 'NOTE') { + let processedValue = value; + if (isQuotedPrintable) { + processedValue = decodeQuotedPrintable(processedValue); + } + card.note = unescapeValue(processedValue); + } else if (key === 'BDAY') { + let dateStr = value.split(/[T ]/)[0].trim(); + let year = null; + let month = null; + let day = null; + const noHyphens = dateStr.replace(/-/g, ''); + if (noHyphens.length === 6 && /^\d{6}$/.test(noHyphens)) { + const yy = parseInt(noHyphens.substring(0, 2), 10); + month = parseInt(noHyphens.substring(2, 4), 10); + day = parseInt(noHyphens.substring(4, 6), 10); + year = yy >= 35 ? 1900 + yy : 2000 + yy; + } else if (dateStr.startsWith('--') || dateStr.startsWith('----')) { + const cleaned = dateStr.replace(/^-+/, ''); + if (cleaned.length === 4 && /^\d{4}$/.test(cleaned)) { + month = parseInt(cleaned.substring(0, 2), 10); + day = parseInt(cleaned.substring(2, 4), 10); + } else if (cleaned.includes('-')) { + const parts = cleaned.split('-'); + if (parts.length >= 2) { + month = parseInt(parts[0], 10); + day = parseInt(parts[1], 10); + } + } + } else if (noHyphens.length === 8 && /^\d{8}$/.test(noHyphens)) { + year = parseInt(noHyphens.substring(0, 4), 10); + month = parseInt(noHyphens.substring(4, 6), 10); + day = parseInt(noHyphens.substring(6, 8), 10); + } else if (dateStr.includes('-')) { + const parts = dateStr.split('-'); + if (parts[0] && parts[0] !== '' && !/^-+$/.test(parts[0])) { + year = parseInt(parts[0], 10); + } + if (parts.length >= 2) { + month = parseInt(parts[1], 10); + } + if (parts.length >= 3) { + day = parseInt(parts[2], 10); + } + } + const isValidMonth = month && month >= 1 && month <= 12; + const isValidDay = day && day >= 1 && day <= 31; + const isValidYear = !year || year >= 1800 && year <= 2200; + if (isValidMonth && isValidDay && isValidYear) { + card.bday = { + m: month, + d: day + }; + if (year) { + card.bday.y = year; + } + } + } else if (key === 'PHOTO') { + const params = keyPart.split(';').slice(1); + let type = 'jpeg'; + let encoding = null; + params.forEach(param => { + const [pKey, pValue] = param.split('='); + if (pKey && pKey.trim().toUpperCase() === 'TYPE') { + type = pValue ? pValue.trim().toLowerCase() : 'jpeg'; + } else if (pKey && pKey.trim().toUpperCase() === 'ENCODING') { + encoding = pValue ? pValue.trim().toLowerCase() : null; + } + }); + if (encoding === 'b') { + card.photo = { + type: type, + data: value, + ref: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR + }; + } else { + card.photo = { + type: type, + data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR, + ref: value + }; + } + } else if (key === 'TEL') { + const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE=')); + const types = typeParams.flatMap(param => { + const equalIndex = param.indexOf('='); + const valuesPart = param.substring(equalIndex + 1); + return valuesPart.split(',').map(t => { + const cleaned = t.trim().toLowerCase(); + return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned; + }); + }).filter(t => t !== 'internet'); + const mapKey = `tel|${value}`; + if (!commMap.has(mapKey)) { + commMap.set(mapKey, new Set()); + } + types.forEach(t => commMap.get(mapKey).add(t)); + } else if (key === 'EMAIL') { + const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE=')); + const types = typeParams.flatMap(param => { + const equalIndex = param.indexOf('='); + const valuesPart = param.substring(equalIndex + 1); + return valuesPart.split(',').map(t => { + const cleaned = t.trim().toLowerCase(); + return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned; + }); + }).filter(t => t !== 'internet'); + const mapKey = `email|${value}`; + if (!commMap.has(mapKey)) { + commMap.set(mapKey, new Set()); + } + types.forEach(t => commMap.get(mapKey).add(t)); + } else if (key === 'IMPP') { + const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE=')); + const types = typeParams.flatMap(param => { + const equalIndex = param.indexOf('='); + const valuesPart = param.substring(equalIndex + 1); + return valuesPart.split(',').map(t => { + const cleaned = t.trim().toLowerCase(); + return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned; + }); + }).filter(t => t !== 'internet'); + const mapKey = value.startsWith('tinode:') ? `tinode|${value}` : `impp|${value}`; + if (!commMap.has(mapKey)) { + commMap.set(mapKey, new Set()); + } + types.forEach(t => commMap.get(mapKey).add(t)); + } else if (key === 'URL') { + const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE=')); + const types = typeParams.flatMap(param => { + const equalIndex = param.indexOf('='); + const valuesPart = param.substring(equalIndex + 1); + return valuesPart.split(',').map(t => { + const cleaned = t.trim().toLowerCase(); + return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned; + }); + }).filter(t => t !== 'internet'); + const mapKey = `http|${value}`; + if (!commMap.has(mapKey)) { + commMap.set(mapKey, new Set()); + } + types.forEach(t => commMap.get(mapKey).add(t)); + } + }); + if (commMap.size > 0) { + card.comm = []; + commMap.forEach((types, key) => { + const [proto, value] = key.split('|', 2); + card.comm.push({ + proto: proto, + des: Array.from(types), + value: value + }); + }); + } + return card; +}; +TheCard.isFileSupported = function (type, name) { + return type == 'text/vcard' || (name || '').endsWith('.vcf') || (name || '').endsWith('.vcard'); +}; +function theCard(fn, imageUrl, imageMimeType, note) { + let card = null; + fn = fn && fn.trim(); + note = note && note.trim(); + if (fn) { + card = { + fn: fn + }; + } + if (typeof note == 'string') { + card = card || {}; + card.note = note ? note : _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR; + } + if (imageUrl) { + card = card || {}; + let mimeType = imageMimeType; + const matches = /^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl); + if (matches) { + mimeType = matches[1]; + card.photo = { + data: imageUrl.substring(imageUrl.indexOf(',') + 1), + ref: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR + }; + } else { + card.photo = { + data: _config_js__WEBPACK_IMPORTED_MODULE_0__.DEL_CHAR, + ref: imageUrl + }; + } + card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length); + } + return card; +} +function addOrSetComm(card, proto, value, type, setOnly) { + proto = proto && proto.trim(); + value = value && value.trim(); + if (proto && value) { + card = card || {}; + card.comm = card.comm || []; + if (setOnly) { + card.comm = card.comm.filter(c => { + if (c.proto != proto) return true; + return !c.des.includes(type); + }); + } + card.comm.push({ + proto: proto, + des: [type], + value: value + }); + } + return card; +} +function clearComm(card, proto, value, type) { + if (card && Array.isArray(card.comm)) { + card.comm = card.comm.filter(c => { + if (c.proto != proto) return true; + if (value && c.value != value) return true; + if (type) { + return !c.des.includes(type); + } + return false; + }); + } + return card; +} + +/***/ }), + /***/ "./src/topic.js": /*!**********************!*\ !*** ./src/topic.js ***! @@ -3968,12 +4594,18 @@ class Topic { this.private = null; this.public = null; this.trusted = null; + this.seq = 0; + this.read = 0; + this.recv = 0; + this.clear = 0; + this.mrrid = 0; this._users = {}; this._queuedSeqId = _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID; this._maxSeq = 0; this._minSeq = 0; this._noEarlierMsgs = false; this._maxDel = 0; + this._mrrSeen = 0; this._recvNotificationTimer = null; this._tags = []; this._credentials = []; @@ -3998,6 +4630,7 @@ class Topic { this.onTagsUpdated = callbacks.onTagsUpdated; this.onCredsUpdated = callbacks.onCredsUpdated; this.onAuxUpdated = callbacks.onAuxUpdated; + this.onReact = callbacks.onReact; this.onDeleteTopic = callbacks.onDeleteTopic; this.onAllMessagesReceived = callbacks.onAllMessagesReceived; } @@ -4287,6 +4920,10 @@ class Topic { if (params.aux) { this._processMetaAux(params.aux); } + if (params.react) { + params.react.mrrid = ctrl.params?.mrrid | 0; + this._processMetaReact(undefined, params.react); + } return ctrl; }); } @@ -4358,6 +4995,34 @@ class Topic { pinnedTopicRank(topic) { return 0; } + react(seq, emo) { + if (!seq || !emo) { + return Promise.reject(new Error("Invalid parameters")); + } + const curr = this.msgMyReaction(seq); + if (curr == emo) { + emo = _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR; + } + return this.setMeta({ + react: { + seq: seq, + val: emo + } + }); + } + reactions() { + const react = this.aux('react'); + if (react) { + return react.vals; + } + return this._tinode.getServerParam(_config_js__WEBPACK_IMPORTED_MODULE_3__.REACTION_LIST); + } + markReactionsSeen() { + if (this._mrrSeen != this.mrrid) { + this._mrrSeen = this.mrrid; + this._tinode.getMeTopic()._refreshContact('react', this); + } + } delMessages(ranges, hard) { if (!this._attached) { return Promise.reject(new Error("Cannot delete messages in inactive topic")); @@ -4486,11 +5151,23 @@ class Topic { this._tinode.logger("INFO: Cannot send notification in inactive topic"); } } + noteUpload(type) { + const types = { + 'image': 'kpui', + 'video': 'kpuv', + 'file': 'kpu' + }; + if (this._attached) { + this._tinode.noteKeyPress(this.name, types[type] || 'kpu'); + } else { + this._tinode.logger("INFO: Cannot send notification in inactive topic"); + } + } videoCall(evt, seq, payload) { if (!this._attached && !['ringing', 'hang-up'].includes(evt)) { return; } - return this._tinode.videoCall(this.name, seq, evt, payload); + this._tinode.videoCall(this.name, seq, evt, payload); } _updateMyReadRecv(what, seq, ts) { let oldVal, @@ -4668,6 +5345,26 @@ class Topic { msgRecvCount(seq) { return this.msgReceiptCount('recv', seq); } + msgReactions(seq) { + const msg = this.findMessage(seq); + if (!msg) { + return []; + } + return msg.react || []; + } + msgMyReaction(seq) { + const reactions = this.msgReactions(seq); + const me = this._tinode.getCurrentUserID(); + for (let i = 0; i < reactions.length; i++) { + if ((reactions[i].users || []).includes(me)) { + return reactions[i].val; + } + } + return null; + } + hasUnseenReactions() { + return this.mrrid > this._mrrSeen; + } msgHasMoreMessages(min, max, newer) { const gaps = []; if (min >= max) { @@ -4878,6 +5575,21 @@ class Topic { } data.content = _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().updateVideoCall(data.content, upd); } + if (data.react) { + let maxReact = 0; + data.react = (data.react || []).map(r => { + maxReact = Math.max(maxReact, r.mrrid); + return { + mrrid: r.mrrid, + val: r.val, + count: r.count | 0, + users: Array.isArray(r.users) ? r.users.slice() : [] + }; + }); + if (this.mrrid < maxReact) { + this.mrrid = maxReact; + } + } if (!data._noForwarding) { this._messages.put(data); this._tinode._db.addMessage(data); @@ -4917,6 +5629,9 @@ class Topic { if (meta.aux) { this._processMetaAux(meta.aux); } + if (meta.react) { + this._processMetaReact(meta.react); + } if (this.onMeta) { this.onMeta(meta); } @@ -4947,6 +5662,14 @@ class Topic { case 'aux': this.getMeta(this.startMetaQuery().withAux().build()); break; + case 'react': + this._processMetaReact(undefined, { + mrrid: pres.id2 | 0, + seq: pres.seq | 0, + user: pres.act, + val: pres.val + }); + break; case 'acs': uid = pres.src || this._tinode.getCurrentUserID(); user = this._users[uid]; @@ -5085,6 +5808,106 @@ class Topic { this.onAuxUpdated(this._aux); } } + _handleReactionDiff(msg, delta) { + const reacts = [...(msg.react || [])]; + const user = delta.users[0]; + const found = user ? reacts.findIndex(r => r.users.includes(user)) : -1; + if (found >= 0) { + const existing = reacts[found]; + if (delta.val == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR || existing.val == delta.val) { + existing.count--; + existing.mrrid = Math.max(existing.mrrid, delta.mrrid); + if (existing.count <= 0) { + reacts.splice(found, 1); + } else { + const userIdx = existing.users.indexOf(user); + existing.users.splice(userIdx, 1); + } + } else { + const userIdx = existing.users.indexOf(user); + existing.users.splice(userIdx, 1); + existing.count--; + if (existing.count <= 0) { + reacts.splice(found, 1); + } + const emoIndex = reacts.findIndex(r => r.val == delta.val); + if (emoIndex >= 0) { + reacts[emoIndex].users.push(user); + reacts[emoIndex].count++; + reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid); + } else { + reacts.push({ + mrrid: delta.mrrid, + users: [user], + count: 1, + val: delta.val + }); + } + } + } else if (delta.val != _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR) { + const emoIndex = reacts.findIndex(r => r.val == delta.val); + if (emoIndex >= 0) { + if (user) { + reacts[emoIndex].users.push(user); + } + reacts[emoIndex].count++; + reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid); + } else { + reacts.push({ + mrrid: delta.mrrid, + users: user ? [user] : [], + count: 1, + val: delta.val + }); + } + } + return reacts; + } + _processMetaReact(reacts, oneReaction) { + if (!Array.isArray(reacts)) { + if (!oneReaction.seq || !oneReaction.val) { + this._tinode.logger("WARNING: invalid reaction"); + return; + } + reacts = [{ + _diff: true, + seq: oneReaction.seq, + data: [{ + mrrid: oneReaction.mrrid, + val: oneReaction.val, + count: 1, + users: [oneReaction.user || this._tinode.getCurrentUserID()] + }] + }]; + } + const seqIds = []; + reacts.forEach(mr => { + const msg = this.findMessage(mr.seq); + seqIds.push(mr.seq); + if (msg) { + let upd; + if (mr._diff) { + upd = this._handleReactionDiff(msg, mr.data[0]); + } else { + upd = (mr.data || []).map(r => ({ + mrrid: r.mrrid, + val: r.val, + count: r.count | 0, + users: Array.isArray(r.users) ? r.users.slice() : [] + })); + } + msg.react = upd; + const maxReact = upd.reduce((max, r) => Math.max(max, r.mrrid), 0); + if (this.mrrid < maxReact) { + this.mrrid = maxReact; + } + this._tinode._db.updMessageReact(this.name, mr.seq, msg.react); + } + }); + if (this.onReact) { + this.onReact(seqIds); + } + } _processDelMessages(clear, delseq) { this._maxDel = Math.max(clear, this._maxDel); this.clear = Math.max(clear, this.clear); @@ -5131,6 +5954,8 @@ class Topic { this.trusted = null; this._maxSeq = 0; this._minSeq = 0; + this._maxDel = 0; + this._maxReact = 0; this._attached = false; const me = this._tinode.getMeTopic(); if (me) { @@ -5449,7 +6274,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PACKAGE_VERSION: function() { return /* binding */ PACKAGE_VERSION; } /* harmony export */ }); -const PACKAGE_VERSION = "0.25.1"; +const PACKAGE_VERSION = "0.26.0-alpha3"; /***/ }) @@ -5549,6 +6374,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AccessMode: function() { return /* reexport safe */ _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }, /* harmony export */ Drafty: function() { return /* reexport default from dynamic */ _drafty_js__WEBPACK_IMPORTED_MODULE_5___default.a; }, +/* harmony export */ TheCard: function() { return /* reexport safe */ _the_card_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }, /* harmony export */ Tinode: function() { return /* binding */ Tinode; } /* harmony export */ }); /* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ "./src/access-mode.js"); @@ -5563,11 +6389,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js"); /* harmony import */ var _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./fnd-topic.js */ "./src/fnd-topic.js"); /* harmony import */ var _me_topic_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./me-topic.js */ "./src/me-topic.js"); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js"); +/* harmony import */ var _the_card_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./the-card.js */ "./src/the-card.js"); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js"); /** * @module tinode-sdk * - * @copyright 2015-2025 Tinode LLC. + * @copyright 2015-2026 Tinode LLC. * @summary Javascript bindings for Tinode. * @license Apache 2.0 * @version 0.25 @@ -5622,6 +6449,8 @@ __webpack_require__.r(__webpack_exports__); + + let WebSocketProvider; if (typeof WebSocket != 'undefined') { WebSocketProvider = WebSocket; @@ -5698,7 +6527,7 @@ function b64EncodeUnicode(str) { } function jsonBuildHelper(key, val) { if (val instanceof Date) { - val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.rfc3339DateString)(val); + val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.rfc3339DateString)(val); } else if (val instanceof _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]) { val = val.jsonHelper(); } else if (val === undefined || val === null || val === false || Array.isArray(val) && val.length == 0 || typeof val == 'object' && Object.keys(val).length == 0) { @@ -5858,7 +6687,7 @@ class Tinode { }); }).then(_ => { return this._db.mapUsers(data => { - this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, data.public)); + this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, data.public)); }); }).then(_ => { return Promise.all(prom); @@ -5919,7 +6748,7 @@ class Tinode { if (id) { promise = this.#makePromise(id); } - pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.simplify)(pkt); + pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.simplify)(pkt); let msg = JSON.stringify(pkt); this.logger("out: " + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg)); try { @@ -5945,7 +6774,7 @@ class Tinode { } return; } - let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_11__.jsonParseHelper); + let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_12__.jsonParseHelper); if (!pkt) { this.logger("in: " + data); this.logger("ERROR: failed to parse data"); @@ -6206,13 +7035,13 @@ class Tinode { if (pub) { return { user: uid, - public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, pub) + public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, pub) }; } return undefined; }; topic._cachePutUser = (uid, user) => { - this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, user.public)); + this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)({}, user.public)); }; topic._cacheDelUser = uid => { this.#cacheDel('user', uid); @@ -6308,6 +7137,19 @@ class Tinode { static isServerAssignedSeq(seq) { return seq > 0 && seq < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID; } + static parseTinodeUrl(tinodeUrl) { + if (!tinodeUrl || typeof tinodeUrl != 'string') { + return null; + } + if (!tinodeUrl.startsWith('tinode:')) { + return tinodeUrl; + } + const parts = tinodeUrl.substring(7).split("/"); + if (parts.length < 2 || 'id' !== parts[parts.length - 2]) { + return tinodeUrl; + } + return parts[parts.length - 1]; + } static isValidTagValue(tag) { const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\-]{3,23}$/i; return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag); @@ -6391,7 +7233,7 @@ class Tinode { if (typeof url != 'string') { return url; } - if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(url)) { + if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(url)) { const base = 'scheme://host/'; const parsed = new URL(url, base); if (this._apiKey) { @@ -6422,7 +7264,7 @@ class Tinode { pkt.acc.tmpsecret = params.secret; if (Array.isArray(params.attachments) && params.attachments.length > 0) { pkt.extra = { - attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref)) + attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref)) }; } } @@ -6531,7 +7373,7 @@ class Tinode { } if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) { pkt.extra = { - attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref)) + attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref)) }; } if (setParams.tags) { @@ -6574,7 +7416,7 @@ class Tinode { }; if (attachments) { msg.extra = { - attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref)) + attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref)) }; } return this.#send(msg, pub.id); @@ -6647,14 +7489,14 @@ class Tinode { } getMeta(topic, params) { const pkt = this.#initPacket('get', topic); - pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)(pkt.get, params); + pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.mergeObj)(pkt.get, params); return this.#send(pkt, pkt.get.id); } setMeta(topic, params) { const pkt = this.#initPacket('set', topic); const what = []; if (params) { - ['desc', 'sub', 'tags', 'cred', 'aux'].forEach(key => { + ['desc', 'sub', 'tags', 'cred', 'aux', 'react'].forEach(key => { if (params.hasOwnProperty(key)) { what.push(key); pkt.set[key] = params[key]; @@ -6662,7 +7504,7 @@ class Tinode { }); if (Array.isArray(params.attachments) && params.attachments.length > 0) { pkt.extra = { - attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref)) + attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_12__.isUrlRelative)(ref)) }; } } @@ -6727,7 +7569,16 @@ class Tinode { pkt.note.what = 'call'; pkt.note.event = evt; pkt.note.payload = payload; - this.#send(pkt, pkt.note.id); + this.#send(pkt); + } + react(topicName, seq, emo) { + const pkt = this.#initPacket('note', topicName); + pkt.note.seq = seq; + pkt.note.what = 'react'; + pkt.note.payload = { + emo + }; + this.#send(pkt); } getTopic(topicName) { let topic = this.#cacheGet('topic', topicName); @@ -6836,15 +7687,18 @@ Tinode.MESSAGE_STATUS_RECEIVED = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE Tinode.MESSAGE_STATUS_READ = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_READ; Tinode.MESSAGE_STATUS_TO_ME = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_STATUS_TO_ME; Tinode.DEL_CHAR = _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR; -Tinode.MAX_MESSAGE_SIZE = 'maxMessageSize'; -Tinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount'; -Tinode.MIN_TAG_LENGTH = 'minTagLength'; -Tinode.MAX_TAG_LENGTH = 'maxTagLength'; -Tinode.MAX_TAG_COUNT = 'maxTagCount'; -Tinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize'; -Tinode.REQ_CRED_VALIDATORS = 'reqCred'; -Tinode.MSG_DELETE_AGE = 'msgDelAge'; -Tinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/'; +Tinode.MAX_MESSAGE_SIZE = _config_js__WEBPACK_IMPORTED_MODULE_1__.MAX_MESSAGE_SIZE; +Tinode.MAX_SUBSCRIBER_COUNT = _config_js__WEBPACK_IMPORTED_MODULE_1__.MAX_SUBSCRIBER_COUNT; +Tinode.MIN_TAG_LENGTH = _config_js__WEBPACK_IMPORTED_MODULE_1__.MIN_TAG_LENGTH; +Tinode.MAX_TAG_LENGTH = _config_js__WEBPACK_IMPORTED_MODULE_1__.MAX_TAG_LENGTH; +Tinode.MAX_TAG_COUNT = _config_js__WEBPACK_IMPORTED_MODULE_1__.MAX_TAG_COUNT; +Tinode.MAX_FILE_UPLOAD_SIZE = _config_js__WEBPACK_IMPORTED_MODULE_1__.MAX_FILE_UPLOAD_SIZE; +Tinode.REQ_CRED_VALIDATORS = _config_js__WEBPACK_IMPORTED_MODULE_1__.REQ_CRED_VALIDATORS; +Tinode.MSG_DELETE_AGE = _config_js__WEBPACK_IMPORTED_MODULE_1__.MSG_DELETE_AGE; +Tinode.ICE_SERVERS = _config_js__WEBPACK_IMPORTED_MODULE_1__.ICE_SERVERS; +Tinode.REACTION_LIST = _config_js__WEBPACK_IMPORTED_MODULE_1__.REACTION_LIST; +Tinode.URI_TOPIC_ID_PREFIX = 'tinode:///id/'; +Tinode.URI_TOPIC_ALIAS_PREFIX = 'tinode:///alias/'; Tinode.TAG_ALIAS = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_ALIAS; Tinode.TAG_EMAIL = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_EMAIL; Tinode.TAG_PHONE = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_PHONE; diff --git a/umd/tinode.dev.js.map b/umd/tinode.dev.js.map index e3e46a2b..6d70c0e6 100644 --- a/umd/tinode.dev.js.map +++ b/umd/tinode.dev.js.map @@ -1 +1 @@ -{"version":3,"file":"tinode.dev.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/me-topic.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, function() {\nreturn ","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the last element from the buffer.\n * @memberof Tinode.CBuffer#\n * @param {function} filter - optional filter to apply to elements. If filter is provided, the search\n * for the last element starts from the end of the buffer and goes backwards until the filter returns true.\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(filter) {\n return filter ?\n this.buffer.findLast(filter) :\n this.buffer[this.buffer.length - 1];\n }\n\n /**\n * Insert new element(s) to the buffer at the correct position according to the sort method.\n * Variadic: takes one or more arguments. If an array is passed as a single argument, its\n * elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive), default: 0.\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive), default: length of the buffer.\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = Math.max(0, startIdx | 0);\n beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2025 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.25';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n\n// Parameters of exponential backoff for reconnect attempts.\n// 2000 milliseconds, minimum delay between reconnects.\nexport const BACKOFF_BASE = 2_000;\n// Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes.\nexport const BACKOFF_MAX_ITER = 10;\n// Random jitter between reconnection attempts, 0.3 -> 30% jitter.\nexport const BACKOFF_JITTER = 0.3;\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n BACKOFF_BASE,\n BACKOFF_MAX_ITER,\n BACKOFF_JITTER\n} from './config.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = BACKOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + BACKOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= BACKOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n\n // This handler is called when a different tab tries to upgrade the database.\n this.db.onversionchange = _ => {\n this.#logger('PCache', \"another tab tries to upgrade DB, shutting down\");\n this.db.close();\n this.db = null;\n this.disabled = true;\n };\n\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n\n // Alternatively could use event.oldVersion and event.newVersion\n // to determine which object stores to create or upgrade.\n\n if (!this.db.objectStoreNames.contains('topic')) {\n // Object store (table) for topics. The primary key is the topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n }\n\n if (!this.db.objectStoreNames.contains('user')) {\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n }\n\n if (!this.db.objectStoreNames.contains('subscription')) {\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n }\n\n if (!this.db.objectStoreNames.contains('message')) {\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n }\n\n if (!this.db.objectStoreNames.contains('dellog')) {\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n if (!dellog.indexNames.contains('topic_clear')) {\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n }\n }\n }\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.} ranges - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addDelLog(topicName, delId, ranges) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addDelLog', event.target.error);\n reject(event.target.error);\n };\n ranges.forEach(r => trx.objectStore('dellog').add({\n topic: topicName,\n clear: delId,\n low: r.low,\n hi: r.hi || (r.low + 1)\n }));\n trx.commit();\n });\n }\n\n /**\n * Retrieve deleted message records from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve records for.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readDelLog(topicName, query) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['dellog']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const hi = range.hi || (range.low + 1);\n const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').getAll(key).onsuccess = event => {\n const entries = event.target.result;\n if (entries) {\n if (Array.isArray(entries)) {\n result = result.concat(entries.map(entry => {\n return {\n low: entry.low,\n hi: entry.hi\n };\n }));\n } else {\n result.push({\n low: entries.low,\n hi: entries.hi\n });\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n const result = [];\n const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n result.push({\n low: cursor.value.low,\n hi: cursor.value.hi\n });\n count += cursor.value.hi - cursor.value.low;\n if (limit <= 0 || count < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n /**\n * Retrieve the latest 'clear' ID for the given topic.\n * @param {string} topicName\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n maxDelId(topicName) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve(0) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog']);\n trx.onerror = event => {\n this.#logger('PCache', 'maxDelId', event.target.error);\n reject(event.target.error);\n };\n\n const index = trx.objectStore('dellog').index('topic_clear');\n index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev')\n .onsuccess = event => {\n if (event.target.result) {\n resolve(event.target.result.value);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq',\n 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach(f => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2024 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

    Supports conversion of user keyboard input to formatted text:

    \n *
      \n *
    • *abc* → abc
    • \n *
    • _abc_ → abc
    • \n *
    • ~abc~ → abc
    • \n *
    • `abc` → abc
    • \n *
    \n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
    \n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
    \n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\n// Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr';\n// Legacy Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
    ',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Quoted block.\n QQ: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: DRAFTY_FR_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup. DO NOT use in production code.\n *\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (!Drafty.isFormResponseType(entData.mime) && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n/**\n * Check if the given mime-type is a MIME type of drafty form response.\n * @memberof Drafty\n * @static\n *\n * @returns {boolean} true if given mime type is drafty form response, false otherwise.\n */\nDrafty.isFormResponseType = function(mimeType) {\n return mimeType === DRAFTY_FR_MIME_TYPE ||\n mimeType === DRAFTY_FR_MIME_TYPE_LEGACY;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (Drafty.isFormResponseType(c.data['mime'])) {\n // Form response attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Definition of 'fnd' topic.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeToCache\n} from './utils.js';\n\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport default class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Check if the given tag is unique by asking the server.\n * @param tag tag to check.\n * @return promise to be resolved with true if the tag is unique, false otherwise.\n */\n checkTagUniqueness(tag, caller) {\n return new Promise((resolve, reject) => {\n this.subscribe()\n .then(_ => this.setMeta({\n desc: {\n public: tag\n }\n }))\n .then(_ => this.getMeta(this.startMetaQuery().withTags().build()))\n .then(meta => {\n if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n resolve(true);\n }\n const tags = meta.tags.filter(t => t !== caller);\n resolve(tags.length == 0);\n })\n .catch(err => {\n reject(err);\n });\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Definition of 'me' topic.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeObj\n} from './utils.js';\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport default class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.topic = pres.src;\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));\n }\n if (!Topic.isCommTopicName(topic)) {\n return Promise.reject(new Error(\"Invalid topic to pin\"));\n }\n\n const tpin = Array.isArray(this.private && this.private.tpin) ? this.private.tpin : [];\n const found = tpin.includes(topic);\n if ((pin && found) || (!pin && !found)) {\n // Nothing to do.\n return Promise.resolve(tpin);\n }\n\n if (pin) {\n // Add topic to the top of the pinned list.\n tpin.unshift(topic);\n } else {\n // Remove topic from the pinned list.\n tpin.splice(tpin.indexOf(topic), 1);\n }\n\n return this.setMeta({\n desc: {\n private: {\n tpin: tpin.length > 0 ? tpin : Const.DEL_CHAR\n }\n }\n });\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.TopicMe#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n if (!this.private || !this.private.tpin) {\n return 0;\n }\n const idx = this.private.tpin.indexOf(topic);\n return idx < 0 ? 0 : this.private.tpin.length - idx;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.} ranges - ranges of seq IDs to fetch.\n * @param {number=} limit - maximum number of messages to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataRanges(ranges, limit) {\n this.what['data'] = {\n ranges: normalizeRanges(ranges, this.topic._maxSeq),\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages by an array of IDs.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number[]} list - array of seq IDs to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataList(list) {\n return this.withDataRanges(listToRanges(list));\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withAux() {\n this.what['aux'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n listToRanges,\n mergeObj,\n mergeToCache,\n normalizeArray,\n normalizeRanges\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport default class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacks.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Auxiliary data\n this._aux = {};\n\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onAuxUpdated = callbacks.onAuxUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS,\n 'slf': Const.TOPIC_SLF\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_SLF;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n static #isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the local cache or from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server. The goal is to load continous range of messages\n * covering at least between 'min' and 'max' + one full page forward (newer = true) or backwards\n * (newer=false).\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {Array.} gaps - ranges of messages to load.\n * @param {number} min if non-negative, request newer messages with seq >= min.\n * @param {number} max if positive, request older messages with seq < max.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMessagesPage(limit, gaps, min, max, newer) {\n let query = gaps ?\n this.startMetaQuery().withDataRanges(gaps, limit) :\n newer ?\n this.startMetaQuery().withData(min, undefined, limit) :\n this.startMetaQuery().withData(undefined, max, limit);\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then(count => {\n // Recalculate missing ranges.\n gaps = this.msgHasMoreMessages(min, max, newer);\n if (gaps.length == 0) {\n // All messages loaded.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = this.startMetaQuery().withDataRanges(gaps, limit);\n return this.getMeta(query.build());\n });\n }\n\n /**\n * Request to get pinned messages from the local cache or from the server.\n * @memberof Tinode.Topic#\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getPinnedMessages() {\n const pins = this.aux('pins');\n if (!Array.isArray(pins)) {\n return Promise.resolve(0);\n }\n\n const loaded = [];\n let remains = pins;\n // First try fetching from DB, then check deleted log, then ask the server.\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n })\n .then(msgs => {\n msgs.forEach(data => {\n // The 'data' could be undefined.\n if (data) {\n loaded.push(data.seq);\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n });\n if (loaded.length < pins.length) {\n // Some messages are missing, try dellog.\n remains = pins.filter(seq => !loaded.includes(seq));\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n });\n }\n return null;\n })\n .then(ranges => {\n if (ranges) {\n // Found some deleted ranges in dellog.\n remains.forEach(seq => {\n if (ranges.find(r => r.low <= seq && r.hi > seq)) {\n loaded.push(seq);\n }\n });\n }\n if (loaded.length == pins.length) {\n // Got all pinned messages from the local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: loaded.length\n }\n });\n }\n\n remains = pins.filter(seq => !loaded.includes(seq));\n return this.getMeta(this.startMetaQuery().withDataList(remains).build());\n });\n }\n\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n if (params.aux) {\n this._processMetaAux(params.aux);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Set message as pinned or unpinned by adding it to aux.pins array. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - seq ID of the message to pin or un-pin.\n * @param {boolean} pin - true to pin the message, false to un-pin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinMessage(seq, pin) {\n let pinned = this.aux('pins');\n if (!Array.isArray(pinned)) {\n pinned = [];\n }\n let changed = false;\n if (pin) {\n if (!pinned.includes(seq)) {\n changed = true;\n if (pinned.length == Const.MAX_PINNED_COUNT) {\n pinned.shift();\n }\n pinned.push(seq);\n }\n } else {\n if (pinned.includes(seq)) {\n changed = true;\n pinned = pinned.filter(id => id != seq);\n if (pinned.length == 0) {\n pinned = Const.DEL_CHAR;\n }\n }\n }\n if (changed) {\n return this.setMeta({\n aux: {\n pins: pinned\n }\n });\n }\n return Promise.resolve();\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.Topic#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n // Unsupported operation for non-me topics.\n return Promise.reject(new Error(\"Pinning topics is not supported here\"));\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.Topic#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n // Unsupported for non-me topics.\n return 0;\n }\n\n /**\n * Delete messages. Hard-deleting messages requires Deleter (D) permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n const tosend = normalizeRanges(ranges, this._maxSeq)\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = Math.max(ctrl.params.del, this._maxDel);\n this.clear = Math.max(ctrl.params.del, this.clear);\n }\n\n ranges.forEach(rec => {\n if (rec.hi) {\n this.flushMessageRange(rec.low, rec.hi);\n } else {\n this.flushMessage(rec.low);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n // Make a record.\n this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Send {del} message, return promise\n return this.delMessages(listToRanges(list), hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get auxiliary entry by key.\n * @memberof Tinode.Topic#\n * @param {string} key - auxiliary data key to retrieve.\n * @return {Object} value for the key or undefined.\n */\n aux(key) {\n return this._aux[key];\n }\n /**\n * Get alias value (unique tag with alias: prefix), if present.\n * The prefix is stripped off.\n * @memberof Tinode.Topic#\n * @return {string} alias or undefined.\n */\n alias() {\n const alias = this._tags && this._tags.find(t => t.startsWith(Const.TAG_ALIAS));\n if (!alias) {\n return undefined;\n }\n // Remove 'alias:' prefix.\n return alias.substring(Const.TAG_ALIAS.length);\n }\n\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (Topic.#isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n if (msg._deleted) {\n // Skip deleted ranges.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by literal seq (does not resolve message edits).\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent non-deleted message from cache.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast(msg => !msg._deleted);\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {number} min - smallest seq ID loaded range.\n * @param {number} max - greatest seq ID in loaded range.\n * @param {boolean} newer - if true, check for newer messages only.\n * @returns {Array.} - missing ranges in the selected direction.\n */\n msgHasMoreMessages(min, max, newer) {\n // Find gaps in cached messages.\n const gaps = [];\n if (min >= max) {\n return gaps;\n }\n let maxSeq = 0;\n let gap;\n this._messages.forEach((msg, prev) => {\n const p = prev || {\n seq: 0\n };\n const expected = p._deleted ? p.hi : p.seq + 1;\n if (msg.seq > expected) {\n gap = {\n low: expected,\n hi: msg.seq\n };\n } else {\n gap = null;\n }\n // If newer: collect all gaps from min to infinity.\n // If older: collect all gaps from max to zero.\n if (gap && (newer ? gap.hi >= min : gap.low < max)) {\n gaps.push(gap);\n }\n maxSeq = expected;\n });\n\n if (maxSeq < this.seq) {\n gap = {\n low: maxSeq + 1,\n hi: this.seq + 1\n };\n if (newer ? gap.hi >= min : gap.low < max) {\n gaps.push(gap);\n }\n }\n return gaps;\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a 'slf' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'slf' topic, false otherwise.\n */\n isSelfType() {\n return Topic.isSelfTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!Topic.#isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n const upd = {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n };\n if (data.head.vc) {\n upd.vc = true;\n }\n data.content = Drafty.updateVideoCall(data.content, upd);\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (meta.aux) {\n this._processMetaAux(meta.aux);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'aux':\n // Auxiliary data updated.\n this.getMeta(this.startMetaQuery().withAux().build());\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived, in response to received\n // {ctrl} after setMeta-sub, or as a handler for {pres what=sub}.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n if (!this._users[sub.user]) {\n // New subscription.\n this.subcnt++;\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n this.subcnt--;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags == Const.DEL_CHAR || (tags.length == 1 && tags[0] == Const.DEL_CHAR)) {\n tags = [];\n }\n this._tags = tags;\n this._tinode._db.updTopic(this);\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n\n // Called by Tinode when meta.aux is recived.\n _processMetaAux(aux) {\n aux = (!aux || aux == Const.DEL_CHAR) ? {} : aux;\n this._aux = mergeObj(this._aux, aux);\n this._tinode._db.updTopic(this);\n if (this.onAuxUpdated) {\n this.onAuxUpdated(this._aux);\n }\n }\n\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(rec => {\n if (!rec.hi) {\n count++;\n this.flushMessage(rec.low);\n } else {\n count += rec.hi - rec.low;\n this.flushMessageRange(rec.low, rec.hi);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n this._tinode._db.addDelLog(this.name, clear, delseq);\n }\n\n if (count > 0) {\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, query) {\n query = query || {};\n query.limit = query.limit || Const.DEFAULT_MESSAGES_PAGE;\n\n // Count of message loaded from DB.\n let count = 0;\n return db.readMessages(this.name, query)\n .then(msgs => {\n msgs.forEach(data => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n count = msgs.length;\n })\n .then(_ => db.readDelLog(this.name, query))\n .then(dellog => {\n return dellog.forEach(rec => {\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n })\n .then(_ => {\n // DEBUG\n return count;\n });\n }\n\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return dst;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n console.warn(\"Error merging property:\", prop, err);\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval) {\n cache[key] = mergeObj(cache[key], newval);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","export const PACKAGE_VERSION = \"0.25.1\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Check if module exists (development only)\n\tif (__webpack_modules__[moduleId] === undefined) {\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2025 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.25\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(this.logger, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics(data => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n this._db.maxDelId(topic.name).then(clear => {\n topic._maxDel = Math.max(topic._maxDel, clear || 0);\n });\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'aux': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param uniqueTag tag to add, must be fully-qualified; if null or empty, no action is taken.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param prefix prefix to remove\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param prefix prefix to search for.\n * @return the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} tags - Search tags.\n * @property {Object} aux - Auxiliary topic data.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n if (setParams.aux) {\n pkt.sub.set.aux = setParams.aux;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq ID equal or greater than this value.\n * @property {number=} before - Load messages with seq ID lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n * @property {Array.=} range - Ranges of seq IDs to fetch.\n */\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'aux'].forEach(key => {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs.\n *\n * @typedef SeqRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {Array.} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MIN_TAG_LENGTH = 'minTagLength';\nTinode.MAX_TAG_LENGTH = 'maxTagLength';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\nTinode.MSG_DELETE_AGE = 'msgDelAge';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","filter","findLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","Math","max","min","call","find","nearest","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_SLF","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","MAX_PINNED_COUNT","TAG_ALIAS","TAG_EMAIL","TAG_PHONE","BACKOFF_BASE","BACKOFF_MAX_ITER","BACKOFF_JITTER","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onversionchange","onupgradeneeded","objectStoreNames","contains","createObjectStore","keyPath","dellog","indexNames","createIndex","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","ranges","key","hi","low","msgs","concat","push","limit","openCursor","cursor","value","continue","addDelLog","delId","clear","readDelLog","entries","map","entry","maxDelId","index","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","DRAFTY_MIME_TYPE","DRAFTY_FR_MIME_TYPE","DRAFTY_FR_MIME_TYPE_LEGACY","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","entity","tp","offset","len","segments","segment","ele","toGraphemeValues","stringToGraphemes","s","correctAt","correctLen","isEmptyObject","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isFormResponseType","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","mimeType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","graphemes","spansToTree","flatten","child","addNode","n","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","dc","obj","graphemeIndices","graphemeIndex","charIndex","indices","module","exports","Const","Topic","mergeToCache","TopicFnd","_contacts","callbacks","_processMetaSubs","subs","updateCount","getOwnPropertyNames","indexBy","onMetaSub","onSubsUpdated","publish","setMeta","getPrototypeOf","prototype","checkTagUniqueness","caller","subscribe","desc","getMeta","startMetaQuery","withTags","build","meta","t","contacts","cb","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","substring","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","mergeObj","TopicMe","onContactUpdate","_processMetaDesc","turnOff","_db","_updateCachedUser","_myUID","cont","online","seen","when","Date","_refreshContact","onMetaDesc","cacheRemTopic","recv","getTopic","_new","isP2PTopicName","_cachePutUser","_noForwarding","_processMetaCreds","creds","cr","_credentials","findIndex","meth","done","resp","onCredsUpdated","_routePres","pres","what","_resetSub","withDesc","cacheGetTopic","_updateReceived","withLaterOneSub","tgt","dacs","touched","ua","_attached","withOneSub","dummy","onPres","delCredential","method","isCommType","getContact","isArchived","private","arch","getCredentials","pinTopic","pin","isCommTopicName","tpin","unshift","pinnedTopicRank","listToRanges","normalizeRanges","MetaGetBuilder","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withDataRanges","withDataList","list","withEarlierData","_minSeq","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withLaterSub","withCred","withAux","withDel","withLaterDel","_maxDel","extract","normalizeArray","created","trusted","_users","_queuedSeqId","_noEarlierMsgs","_recvNotificationTimer","_aux","_messageVersions","_messages","_delayedLeaveTimer","onData","onMeta","onInfo","onTagsUpdated","onAuxUpdated","onDeleteTopic","onAllMessagesReceived","topicType","types","isMeTopicName","isSelfTopicName","isGroupTopicName","isNewGroupTopicName","isChannelTopicName","isReplacementMsg","#isReplacementMsg","head","replace","isSubscribed","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","createMessage","noEcho","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_cancelled","_fatal","leave","unsub","_gone","leaveDelayed","delay","getMessagesPage","gaps","newer","_loadMessages","msgHasMoreMessages","getPinnedMessages","pins","aux","remains","_processMetaTags","cred","_processMetaAux","subscriber","am","invite","archive","pinMessage","pinned","changed","delMessages","hard","tosend","del","rec","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","alias","origSeq","versions","messages","sinceId","beforeId","unused1","unused2","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","maxSeq","gap","prev","p","expected","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isMeType","isSelfType","isChannelType","isGroupType","isMe","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","vc","_routeInfo","_routeMeta","_processDelMessages","delseq","isTopicCached","info","subcnt","_allMessagesReceived","cached","date","isNaN","isValidDate","d","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","prop","console","warn","cache","newval","simplify","out","trim","toLowerCase","item","pos","ary","r1","r2","reduce","clipOutRange","clip","clipInRange","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","input","output","charCode","bc","bs","String","fromCharCode","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","promise","persist","cacheGet","attachCacheToTopic","cachePut","all","args","dateString","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","stringify","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","isValidTagValue","ALIAS_REGEX","tagSplit","splitAt","prefix","setUniqueTag","uniqueTag","clearTagPrefix","tagByPrefix","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","MSG_DELETE_AGE","URI_TOPIC_ID_PREFIX"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"tinode.dev.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/me-topic.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/the-card.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, function() {\nreturn ","/**\n * @file Access control model.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n/**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback Tinode.ForEachCallbackType\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n/**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback Tinode.FilterCallbackType\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolean} true to keep the element, false to remove.\n */\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {Function} compare - custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique - enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the last element from the buffer.\n * @memberof Tinode.CBuffer#\n * @param {function} filter - optional filter to apply to elements. If filter is provided, the search\n * for the last element starts from the end of the buffer and goes backwards until the filter returns true.\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(filter) {\n return filter ?\n this.buffer.findLast(filter) :\n this.buffer[this.buffer.length - 1];\n }\n\n /**\n * Insert new element(s) to the buffer at the correct position according to the sort method.\n * Variadic: takes one or more arguments. If an array is passed as a single argument, its\n * elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive), default: 0.\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive), default: length of the buffer.\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = Math.max(0, startIdx | 0);\n beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2026 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.25';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n\n// Parameters of exponential backoff for reconnect attempts.\n// 2000 milliseconds, minimum delay between reconnects.\nexport const BACKOFF_BASE = 2_000;\n// Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes.\nexport const BACKOFF_MAX_ITER = 10;\n// Random jitter between reconnection attempts, 0.3 -> 30% jitter.\nexport const BACKOFF_JITTER = 0.3;\n\n// Names of keys to server-provided configuration limits.\nexport const MAX_MESSAGE_SIZE = 'maxMessageSize';\nexport const MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nexport const MIN_TAG_LENGTH = 'minTagLength';\nexport const MAX_TAG_LENGTH = 'maxTagLength';\nexport const MAX_TAG_COUNT = 'maxTagCount';\nexport const MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nexport const REQ_CRED_VALIDATORS = 'reqCred';\nexport const MSG_DELETE_AGE = 'msgDelAge';\nexport const ICE_SERVERS = 'iceServers';\nexport const REACTION_LIST = 'reactions';\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n BACKOFF_BASE,\n BACKOFF_MAX_ITER,\n BACKOFF_JITTER\n} from './config.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param {Object} wsProvider - WebSocket provider, e.g. for nodeJS, require('ws').\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {Function} l - variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ - Host name to connect to; if null the old host name will be used.\n * @param {boolean} force - Force new connection even if one already exists.\n * @returns {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = BACKOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + BACKOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= BACKOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise - promise resolved or rejected when the reconnect attempt completes.\n *\n */\n /**\n * A callback to inform when the next attempt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n\n // This handler is called when a different tab tries to upgrade the database.\n this.db.onversionchange = _ => {\n this.#logger('PCache', \"another tab tries to upgrade DB, shutting down\");\n this.db.close();\n this.db = null;\n this.disabled = true;\n };\n\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n\n // Alternatively could use event.oldVersion and event.newVersion\n // to determine which object stores to create or upgrade.\n\n if (!this.db.objectStoreNames.contains('topic')) {\n // Object store (table) for topics. The primary key is the topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n }\n\n if (!this.db.objectStoreNames.contains('user')) {\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n }\n\n if (!this.db.objectStoreNames.contains('subscription')) {\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n }\n\n if (!this.db.objectStoreNames.contains('message')) {\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n }\n\n if (!this.db.objectStoreNames.contains('dellog')) {\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n if (!dellog.indexNames.contains('topic_clear')) {\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n }\n }\n }\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point in updating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (src && src._status != status) {\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Update reactions to a message.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update.\n * @param {Array} react - updated reactions.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageReact(topicName, seq, react) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageReact', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (src && src.react !== react) {\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n react: react\n }));\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.} ranges - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addDelLog(topicName, delId, ranges) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addDelLog', event.target.error);\n reject(event.target.error);\n };\n ranges.forEach(r => trx.objectStore('dellog').add({\n topic: topicName,\n clear: delId,\n low: r.low,\n hi: r.hi || (r.low + 1)\n }));\n trx.commit();\n });\n }\n\n /**\n * Retrieve deleted message records from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve records for.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readDelLog(topicName, query) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['dellog']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const hi = range.hi || (range.low + 1);\n const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').getAll(key).onsuccess = event => {\n const entries = event.target.result;\n if (entries) {\n if (Array.isArray(entries)) {\n result = result.concat(entries.map(entry => {\n return {\n low: entry.low,\n hi: entry.hi\n };\n }));\n } else {\n result.push({\n low: entries.low,\n hi: entries.hi\n });\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n const result = [];\n const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n result.push({\n low: cursor.value.low,\n hi: cursor.value.hi\n });\n count += cursor.value.hi - cursor.value.low;\n if (limit <= 0 || count < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n /**\n * Retrieve the latest 'clear' ID for the given topic.\n * @param {string} topicName\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n maxDelId(topicName) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve(0) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog']);\n trx.onerror = event => {\n this.#logger('PCache', 'maxDelId', event.target.error);\n reject(event.target.error);\n };\n\n const index = trx.objectStore('dellog').index('topic_clear');\n index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev')\n .onsuccess = event => {\n if (event.target.result) {\n resolve(event.target.result.value);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq',\n 'clear', 'mrrid', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted',\n '_mrrSeen'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach(f => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content', 'react'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2026 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

    Supports conversion of user keyboard input to formatted text:

    \n *
      \n *
    • *abc* → abc
    • \n *
    • _abc_ → abc
    • \n *
    • ~abc~ → abc
    • \n *
    • `abc` → abc
    • \n *
    \n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
    \n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
    \n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\n// Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr';\n// Legacy Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'fn', 'incoming', 'mime', 'name',\n 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n TC: { // TheCard\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
    ',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Quoted block.\n QQ: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: (data) => {\n return data ? {} : null;\n },\n },\n TC: { // TheCard\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-fn': data.fn,\n 'data-title': data.title,\n };\n }\n },\n // Video call\n VC: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: DRAFTY_FR_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Append TheCard to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append TheCard to.\n * @param {Object} theCardData - TheCard data object.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendTheCard = function(content, theCardData) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n key: content.ent.length\n });\n content.txt += ' ';\n\n // const {...object} = classInstance;\n content.ent.push({\n tp: 'TC',\n data: theCardData\n });\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup. DO NOT use in production code.\n *\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data - entity data.\n * @param {string} tp - entity type.\n * @param {number} index - entity's index in `content.ent`.\n *\n * @returns {boolean} 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (!Drafty.isFormResponseType(entData.mime) && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\nDrafty.contentType = DRAFTY_MIME_TYPE;\n\n/**\n * Check if the given mime-type is a MIME type of drafty form response.\n * @memberof Drafty\n * @static\n *\n * @returns {boolean} true if given mime type is drafty form response, false otherwise.\n */\nDrafty.isFormResponseType = function(mimeType) {\n return mimeType === DRAFTY_FR_MIME_TYPE ||\n mimeType === DRAFTY_FR_MIME_TYPE_LEGACY;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (Drafty.isFormResponseType(c.data['mime'])) {\n // Form response attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Definition of 'fnd' topic.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeToCache\n} from './utils.js';\n\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport default class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params - parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Check if the given tag is unique by asking the server.\n * @param {string} tag - tag to check.\n * @param {string} caller - identifier of the caller.\n * @returns {Promise} promise to be resolved with true if the tag is unique, false otherwise.\n */\n checkTagUniqueness(tag, caller) {\n return new Promise((resolve, reject) => {\n this.subscribe()\n .then(_ => this.setMeta({\n desc: {\n public: tag\n }\n }))\n .then(_ => this.getMeta(this.startMetaQuery().withTags().build()))\n .then(meta => {\n if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n resolve(true);\n }\n const tags = meta.tags.filter(t => t !== caller);\n resolve(tags.length == 0);\n })\n .catch(err => {\n reject(err);\n });\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl - base URL of upload server.\n * @param {File|Blob} data - data to upload.\n * @param {string} avatarFor - topic name if the upload represents an avatar.\n * @param {Function} onProgress - callback. Takes one {number} parameter 0..1\n * @param {Function} onSuccess - callback. Called when the file is successfully uploaded.\n * @param {Function} onFailure - callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total, data.type || 'application/octet-stream');\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total, data.type || 'application/octet-stream');\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data - data to upload.\n * @param {string} avatarFor - topic name if the upload represents an avatar.\n * @param {Function} onProgress - callback. Takes one {number} parameter 0..1\n * @param {Function} onSuccess - callback. Called when the file is successfully uploaded.\n * @param {Function} onFailure - callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Definition of 'me' topic.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeObj\n} from './utils.js';\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport default class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is received.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just ignore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.val\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n case 'react':\n // Reaction to message.\n cont._processMetaReact(undefined, {\n mrrid: pres.id2 | 0,\n seq: pres.seq,\n user: pres.actor,\n val: pres.val\n });\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.topic = pres.src;\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overridden and throws an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} method - Validation method such as 'email' or 'tel'.\n * @param {string} value - Credential value to delete.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact - contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));\n }\n if (!Topic.isCommTopicName(topic)) {\n return Promise.reject(new Error(\"Invalid topic to pin\"));\n }\n\n const tpin = Array.isArray(this.private && this.private.tpin) ? this.private.tpin : [];\n const found = tpin.includes(topic);\n if ((pin && found) || (!pin && !found)) {\n // Nothing to do.\n return Promise.resolve(tpin);\n }\n\n if (pin) {\n // Add topic to the top of the pinned list.\n tpin.unshift(topic);\n } else {\n // Remove topic from the pinned list.\n tpin.splice(tpin.indexOf(topic), 1);\n }\n\n return this.setMeta({\n desc: {\n private: {\n tpin: tpin.length > 0 ? tpin : Const.DEL_CHAR\n }\n }\n });\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.TopicMe#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n if (!this.private || !this.private.tpin) {\n return 0;\n }\n const idx = this.private.tpin.indexOf(topic);\n return idx < 0 ? 0 : this.private.tpin.length - idx;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.} ranges - ranges of seq IDs to fetch.\n * @param {number=} limit - maximum number of messages to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataRanges(ranges, limit) {\n this.what['data'] = {\n ranges: normalizeRanges(ranges, this.topic._maxSeq),\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages by an array of IDs.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number[]} list - array of seq IDs to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataList(list) {\n return this.withDataRanges(listToRanges(list));\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withAux() {\n this.what['aux'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Definition of a contact card, similar to vCard.\n *\n * @copyright 2025-2026 Tinode LLC.\n *\n * TheCard class represents a contact card with various fields such as full name,\n * photo, organization, communication methods, and birthday.\n */\n\n'use strict';\n\nimport {\n DEL_CHAR\n} from './config.js';\n\nconst THE_CARD_MIME_TYPE = 'text/x-the-card';\n\nexport default class TheCard {\n /**\n * Create a new contact card.\n * @param {string} fn - Full name.\n * @param {string} imageUrl - Avatar URL or data URL.\n * @param {string} imageMimeType - MIME type of the avatar image.\n * @param {string} note - Notes or comments about the contact.\n */\n constructor(fn, imageUrl, imageMimeType, note) {\n Object.assign(this, theCard(fn, imageUrl, imageMimeType, note) || {});\n }\n\n /**\n * Merge another card into this one.\n * @param {Object} that - Card object to merge.\n */\n merge(that) {\n Object.assign(this, that);\n }\n\n /**\n * Get the MIME type of the card.\n * @returns {string} The MIME type.\n */\n get contentType() {\n return THE_CARD_MIME_TYPE;\n }\n\n /**\n * Get the size of the card in bytes when serialized as JSON.\n * @returns {number} Size in bytes.\n */\n get size() {\n return JSON.stringify(this).length;\n }\n}\n\nTheCard.contentType = THE_CARD_MIME_TYPE;\n\n/**\n * Set the full name on a card.\n * @param {Object} card - The card object.\n * @param {string} fn - Full name to set.\n * @returns {Object} The updated card.\n */\nTheCard.setFn = function(card, fn) {\n fn = fn && fn.trim();\n card = card || {};\n card.fn = fn || undefined;\n return card;\n}\n\n/**\n * Get the full name from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} The full name or null if not set.\n */\nTheCard.getFn = function(card) {\n if (card && card.fn) {\n return card.fn;\n }\n return null;\n}\n\n/**\n * Set notes on a card.\n * @param {Object} card - The card object.\n * @param {string} note - Notes to set.\n * @returns {Object} The updated card.\n */\nTheCard.setNote = function(card, note) {\n note = note && note.trim();\n card = card || {};\n card.note = note ? note : DEL_CHAR;\n return card;\n}\n\n/**\n * Set photo/avatar on a card.\n * @param {Object} card - The card object.\n * @param {string} imageUrl - Image URL or data URL.\n * @param {string} imageMimeType - MIME type of the image.\n * @returns {Object} The updated card.\n */\nTheCard.setPhoto = function(card, imageUrl, imageMimeType) {\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n data: DEL_CHAR,\n ref: imageUrl\n };\n // Get mime type from URL, if not provided.\n if (!mimeType) {\n const ext = /\\.([a-z0-9]+)$/i.exec(imageUrl);\n if (ext) {\n const extLower = ext[1].toLowerCase();\n const mimeMap = {\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'bmp': 'image/bmp',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml'\n };\n mimeType = mimeMap[extLower] || null;\n }\n }\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n } else {\n card = card || {};\n card.photo = DEL_CHAR;\n }\n return card;\n}\n\n/**\n * Get photo URL from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} Photo URL or data URL, or null if not set.\n */\nTheCard.getPhotoUrl = function(card) {\n if (card && card.photo) {\n if (card.photo.ref && card.photo.ref != DEL_CHAR) {\n return card.photo.ref;\n } else if (card.photo.data && card.photo.data != DEL_CHAR) {\n return 'data:image/' + (card.photo.type || 'jpeg') + ';base64,' + card.photo.data;\n }\n }\n return null;\n}\n\n/**\n * Get organization name from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} Organization name or null if not set.\n */\nTheCard.getOrg = function(card) {\n if (card && card.org) {\n return card.org.fn || null;\n }\n return null;\n}\n\n/**\n * Set a phone number on a card, replacing any existing phone with the same type.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number.\n * @param {string} [type='voice'] - Type of phone number (e.g., 'voice', 'mobile', 'work').\n * @returns {Object} The updated card.\n */\nTheCard.setPhone = function(card, phone, type = 'voice') {\n return addOrSetComm(card, 'tel', phone, type, true);\n}\n\n/**\n * Set an email address on a card, replacing any existing email with the same type.\n * @param {Object} card - The card object.\n * @param {string} email - Email address.\n * @param {string} [type='home'] - Type of email (e.g., 'home', 'work').\n * @returns {Object} The updated card.\n */\nTheCard.setEmail = function(card, email, type = 'home') {\n return addOrSetComm(card, 'email', email, type, true);\n}\n\n/**\n * Set a Tinode ID on a card, replacing any existing ID with the same type.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode user ID.\n * @param {string} [type='home'] - Type of ID.\n * @returns {Object} The updated card.\n */\nTheCard.setTinodeID = function(card, tinodeID, type = 'home') {\n return addOrSetComm(card, 'tinode', tinodeID, type, true);\n}\n\n/**\n * Add a phone number to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number.\n * @param {string} [type='voice'] - Type of phone number.\n * @returns {Object} The updated card.\n */\nTheCard.addPhone = function(card, phone, type = 'voice') {\n return addOrSetComm(card, 'tel', phone, type, false);\n}\n\n/**\n * Add an email address to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} email - Email address.\n * @param {string} [type='home'] - Type of email.\n * @returns {Object} The updated card.\n */\nTheCard.addEmail = function(card, email, type = 'home') {\n return addOrSetComm(card, 'email', email, type, false);\n}\n\n/**\n * Add a Tinode ID to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode user ID.\n * @param {string} [type='home'] - Type of ID.\n * @returns {Object} The updated card.\n */\nTheCard.addTinodeID = function(card, tinodeID, type = 'home') {\n return addOrSetComm(card, 'tinode', tinodeID, type, false);\n}\n\n/**\n * Remove phone number(s) from a card.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number to remove (optional).\n * @param {string} type - Type of phone to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearPhone = function(card, phone, type) {\n return clearComm(card, 'tel', phone, type);\n}\n\n/**\n * Remove email address(es) from a card.\n * @param {Object} card - The card object.\n * @param {string} email - Email to remove (optional).\n * @param {string} type - Type of email to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearEmail = function(card, email, type) {\n return clearComm(card, 'email', email, type);\n}\n\n/**\n * Remove Tinode ID(s) from a card.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode ID to remove (optional).\n * @param {string} type - Type of ID to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearTinodeID = function(card, tinodeID, type) {\n return clearComm(card, 'tinode', tinodeID, type);\n}\n\n/**\n * Get all communication methods of a specific protocol from a card.\n * @param {Object} card - The card object.\n * @param {string} proto - Protocol ('tel', 'email', 'tinode', 'http').\n * @returns {Array} Array of communication entries matching the protocol.\n */\nTheCard.getComm = function(card, proto) {\n if (card && Array.isArray(card.comm)) {\n return card.comm.filter(c => c.proto == proto);\n }\n return [];\n}\n\n/**\n * Get all email addresses from a card.\n * @param {Object} card - The card object.\n * @returns {Array} Array of email addresses.\n */\nTheCard.getEmails = function(card) {\n return TheCard.getComm(card, 'email').map(c => c.value);\n}\n\n/**\n * Get all phone numbers from a card.\n * @param {Object} card - The card object.\n * @returns {Array} Array of phone numbers.\n */\nTheCard.getPhones = function(card) {\n return TheCard.getComm(card, 'tel').map(c => c.value);\n}\n\n/**\n * Get the first Tinode ID from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} The first Tinode ID or null if none.\n */\nTheCard.getFirstTinodeID = function(card) {\n const comms = TheCard.getComm(card, 'tinode');\n if (comms.length > 0) {\n return comms[0].value;\n }\n return null;\n}\n\n/**\n * Export a card as vCard 3.0 format string.\n * @param {Object} card - The card object to export.\n * @returns {string|null} vCard formatted string or null if card is empty.\n */\nTheCard.exportVCard = function(card) {\n if (!card) {\n return null;\n }\n\n let vcard = 'BEGIN:VCARD\\r\\nVERSION:3.0\\r\\n';\n\n if (card.fn) {\n vcard += `FN:${card.fn}\\r\\n`;\n }\n\n if (card.n) {\n vcard += `N:${card.n.surname || ''};${card.n.given || ''};${card.n.additional || ''};${card.n.prefix || ''};${card.n.suffix || ''}\\r\\n`;\n }\n\n if (card.org) {\n if (card.org.fn) {\n vcard += `ORG:${card.org.fn}\\r\\n`;\n }\n if (card.org.title) {\n vcard += `TITLE:${card.org.title}\\r\\n`;\n }\n }\n\n if (card.note && card.note != DEL_CHAR) {\n vcard += `NOTE:${card.note}\\r\\n`;\n }\n\n if (card.bday && card.bday.m && card.bday.d) {\n // Format as YYYY-MM-DD or --MM-DD if no year\n const year = card.bday.y ? String(card.bday.y).padStart(4, '0') : '--';\n const month = String(card.bday.m).padStart(2, '0');\n const day = String(card.bday.d).padStart(2, '0');\n vcard += `BDAY:${year}-${month}-${day}\\r\\n`;\n }\n\n if (card.photo) {\n if (card.photo.ref && card.photo.ref != DEL_CHAR) {\n vcard += `PHOTO;VALUE=URI:${card.photo.ref}\\r\\n`;\n } else if (card.photo.data && card.photo.data != DEL_CHAR) {\n vcard += `PHOTO;TYPE=${card.photo.type.toUpperCase()};ENCODING=b:${card.photo.data}\\r\\n`;\n }\n }\n\n if (Array.isArray(card.comm)) {\n card.comm.forEach(comm => {\n const types = comm.des.join(',').toUpperCase();\n if (comm.proto === 'tel') {\n vcard += `TEL;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'email') {\n vcard += `EMAIL;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'tinode') {\n vcard += `IMPP;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'http') {\n vcard += `URL;TYPE=${types}:${comm.value}\\r\\n`;\n }\n });\n }\n\n vcard += 'END:VCARD\\r\\n';\n return vcard;\n}\n\n/**\n * Import a vCard formatted string and convert it to a card object.\n * Supports vCard 2.1 and 3.0 formats with various field encodings.\n * @param {string} vcardStr - vCard formatted string.\n * @returns {Object|null} Parsed card object or null if invalid.\n */\nTheCard.importVCard = function(vcardStr) {\n if (!vcardStr || typeof vcardStr !== 'string') {\n return null;\n }\n\n // Handle line folding: lines starting with space or tab are continuations\n // Also handle Quoted-Printable soft line breaks (line ending with =)\n const rawLines = vcardStr.split(/\\r\\n|\\n/);\n const lines = [];\n let currentLine = '';\n\n for (let i = 0; i < rawLines.length; i++) {\n const line = rawLines[i];\n if (line.startsWith(' ') || line.startsWith('\\t')) {\n // This is a vCard continuation of the previous line\n currentLine += line.substring(1);\n } else if (currentLine.endsWith('=')) {\n // This is a Quoted-Printable soft line break\n // Remove the trailing = and append the next line directly\n currentLine = currentLine.substring(0, currentLine.length - 1) + line;\n } else {\n if (currentLine) {\n lines.push(currentLine);\n }\n currentLine = line;\n }\n }\n if (currentLine) {\n lines.push(currentLine);\n }\n\n let card = {};\n // Temporary map to collect and dedupe comm entries\n const commMap = new Map(); // key: \"proto:value\", value: Set of types\n\n // Helper to unescape vCard text values (unescape \\, \\; \\\\ \\n)\n const unescapeValue = (val) => {\n return val.replace(/\\\\([,;\\\\n])/g, (match, char) => {\n if (char === 'n') return '\\n';\n return char;\n });\n };\n\n // Helper to decode Quoted-Printable encoding\n const decodeQuotedPrintable = (val) => {\n // Decode =XX sequences to bytes, then decode as UTF-8\n // First collect all bytes\n const bytes = [];\n let i = 0;\n while (i < val.length) {\n if (val[i] === '=' && i + 2 < val.length) {\n const hex = val.substring(i + 1, i + 3);\n if (/^[0-9A-F]{2}$/i.test(hex)) {\n bytes.push(parseInt(hex, 16));\n i += 3;\n } else {\n // Not a valid hex sequence, keep the character as-is\n bytes.push(val.charCodeAt(i));\n i++;\n }\n } else {\n bytes.push(val.charCodeAt(i));\n i++;\n }\n }\n\n // Decode UTF-8 bytes to string\n try {\n const uint8Array = new Uint8Array(bytes);\n return new TextDecoder('utf-8').decode(uint8Array);\n } catch (e) {\n // Fallback if TextDecoder is not available\n return val.replace(/=([0-9A-F]{2})/gi, (match, hex) => {\n return String.fromCharCode(parseInt(hex, 16));\n });\n }\n };\n\n lines.forEach(line => {\n const [keyPart, ...valueParts] = line.split(':');\n if (!keyPart || valueParts.length === 0) {\n return;\n }\n const value = valueParts.join(':');\n\n const keyParams = keyPart.split(';');\n const key = keyParams[0].trim().toUpperCase();\n\n // Check if QUOTED-PRINTABLE encoding is specified\n const isQuotedPrintable = keyParams.some(param =>\n param.trim().toUpperCase() === 'QUOTED-PRINTABLE' ||\n param.trim().toUpperCase() === 'ENCODING=QUOTED-PRINTABLE'\n );\n\n if (key === 'FN') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.fn = unescapeValue(processedValue);\n } else if (key === 'N') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n const parts = processedValue.split(';');\n card.n = {\n surname: parts[0] ? unescapeValue(parts[0]) : undefined,\n given: parts[1] ? unescapeValue(parts[1]) : undefined,\n additional: parts[2] ? unescapeValue(parts[2]) : undefined,\n prefix: parts[3] ? unescapeValue(parts[3]) : undefined,\n suffix: parts[4] ? unescapeValue(parts[4]) : undefined,\n };\n // Clean up undefined properties.\n Object.keys(card.n).forEach(key => card.n[key] === undefined && delete card.n[key]);\n if (Object.keys(card.n).length === 0) {\n delete card.n;\n }\n } else if (key === 'ORG') {\n // Multiple values are separated by semicolon. We only use the first one as distinct name.\n // The second one is usually the department, which we skip.\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n const parts = processedValue.split(';');\n card.org = card.org || {};\n card.org.fn = parts[0] ? unescapeValue(parts[0]) : undefined;\n if (!card.org.fn) delete card.org.fn;\n } else if (key === 'TITLE') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.org = card.org || {};\n card.org.title = processedValue ? unescapeValue(processedValue) : undefined;\n if (!card.org.title) delete card.org.title;\n } else if (key === 'NOTE') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.note = unescapeValue(processedValue);\n } else if (key === 'BDAY') {\n // Parse birthday in various formats\n // Strip time if present (anything after T or space)\n let dateStr = value.split(/[T ]/)[0].trim();\n\n let year = null;\n let month = null;\n let day = null;\n\n // Remove hyphens for easier parsing\n const noHyphens = dateStr.replace(/-/g, '');\n\n if (noHyphens.length === 6 && /^\\d{6}$/.test(noHyphens)) {\n // YYMMDD format\n const yy = parseInt(noHyphens.substring(0, 2), 10);\n month = parseInt(noHyphens.substring(2, 4), 10);\n day = parseInt(noHyphens.substring(4, 6), 10);\n // If YY >= 35, it's 19XX, otherwise 20XX\n year = yy >= 35 ? 1900 + yy : 2000 + yy;\n } else if (dateStr.startsWith('--') || dateStr.startsWith('----')) {\n // --MMDD or ----MMDD format (no year)\n const cleaned = dateStr.replace(/^-+/, '');\n if (cleaned.length === 4 && /^\\d{4}$/.test(cleaned)) {\n month = parseInt(cleaned.substring(0, 2), 10);\n day = parseInt(cleaned.substring(2, 4), 10);\n } else if (cleaned.includes('-')) {\n const parts = cleaned.split('-');\n if (parts.length >= 2) {\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n }\n }\n } else if (noHyphens.length === 8 && /^\\d{8}$/.test(noHyphens)) {\n // YYYYMMDD format\n year = parseInt(noHyphens.substring(0, 4), 10);\n month = parseInt(noHyphens.substring(4, 6), 10);\n day = parseInt(noHyphens.substring(6, 8), 10);\n } else if (dateStr.includes('-')) {\n // YYYY-MM-DD format\n const parts = dateStr.split('-');\n if (parts[0] && parts[0] !== '' && !/^-+$/.test(parts[0])) {\n year = parseInt(parts[0], 10);\n }\n if (parts.length >= 2) {\n month = parseInt(parts[1], 10);\n }\n if (parts.length >= 3) {\n day = parseInt(parts[2], 10);\n }\n }\n\n // Basic validation\n const isValidMonth = month && month >= 1 && month <= 12;\n const isValidDay = day && day >= 1 && day <= 31;\n const isValidYear = !year || (year >= 1800 && year <= 2200);\n\n if (isValidMonth && isValidDay && isValidYear) {\n card.bday = {\n m: month,\n d: day\n };\n if (year) {\n card.bday.y = year;\n }\n }\n } else if (key === 'PHOTO') {\n const params = keyPart.split(';').slice(1);\n let type = 'jpeg';\n let encoding = null;\n params.forEach(param => {\n const [pKey, pValue] = param.split('=');\n if (pKey && pKey.trim().toUpperCase() === 'TYPE') {\n type = pValue ? pValue.trim().toLowerCase() : 'jpeg';\n } else if (pKey && pKey.trim().toUpperCase() === 'ENCODING') {\n encoding = pValue ? pValue.trim().toLowerCase() : null;\n }\n });\n if (encoding === 'b') {\n card.photo = {\n type: type,\n data: value,\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n type: type,\n data: DEL_CHAR,\n ref: value\n };\n }\n } else if (key === 'TEL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `tel|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'EMAIL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `email|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'IMPP') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = value.startsWith('tinode:') ? `tinode|${value}` : `impp|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'URL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `http|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n }\n });\n\n // Convert commMap to comm array\n if (commMap.size > 0) {\n card.comm = [];\n commMap.forEach((types, key) => {\n const [proto, value] = key.split('|', 2);\n card.comm.push({\n proto: proto,\n des: Array.from(types),\n value: value\n });\n });\n }\n\n return card;\n}\n\n/**\n * Check if a file type or name is a supported vCard format.\n * @param {string} type - MIME type of the file.\n * @param {string} name - File name.\n * @returns {boolean} True if the file is a vCard format.\n */\nTheCard.isFileSupported = function(type, name) {\n return type == 'text/vcard' ||\n (name || '').endsWith('.vcf') ||\n (name || '').endsWith('.vcard');\n}\n\nfunction theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n data: DEL_CHAR,\n ref: imageUrl\n };\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n }\n\n return card;\n}\n\nfunction addOrSetComm(card, proto, value, type, setOnly) {\n proto = proto && proto.trim();\n value = value && value.trim();\n if (proto && value) {\n card = card || {};\n card.comm = card.comm || [];\n if (setOnly) {\n // Remove existing entries with the same proto and type.\n card.comm = card.comm.filter(c => {\n if (c.proto != proto) return true;\n return !c.des.includes(type);\n });\n }\n card.comm.push({\n proto: proto,\n des: [type], // Always use array\n value: value\n });\n }\n return card;\n}\n\nfunction clearComm(card, proto, value, type) {\n if (card && Array.isArray(card.comm)) {\n card.comm = card.comm.filter(c => {\n if (c.proto != proto) return true;\n if (value && c.value != value) return true;\n if (type) {\n return !c.des.includes(type);\n }\n return false;\n });\n }\n return card;\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n listToRanges,\n mergeObj,\n mergeToCache,\n normalizeArray,\n normalizeRanges\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport default class Topic {\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {Function} callbacks.onData - Callback which receives a {data} message.\n * @param {Function} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {Function} callbacks.onPres - Callback which receives a {pres} message.\n * @param {Function} callbacks.onInfo - Callback which receives an {info} message.\n * @param {Function} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {Function} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {Function} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {Function} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {Function} callbacks.onTagsUpdated - Called after user discovery tags are updated.\n * @param {Function} callbacks.onCredsUpdated - Called after credentials are updated.\n * @param {Function} callbacks.onAuxUpdated - Called after auxiliary data is updated.\n * @param {Function} callbacks.onReact - Called after message reactions are updated.\n * @param {Function} callbacks.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n // Last known messge sequence number.\n this.seq = 0;\n // Last known read message ID.\n this.read = 0;\n // Last known received message ID.\n this.recv = 0;\n // Last known deleted message ID.\n this.clear = 0;\n // Last known reaction ID.\n this.mrrid = 0;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // The maximum seen reaction ID, same logic as read.\n this._mrrSeen = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Auxiliary data\n this._aux = {};\n\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trigger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onAuxUpdated = callbacks.onAuxUpdated;\n this.onReact = callbacks.onReact;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS,\n 'slf': Const.TOPIC_SLF\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_SLF;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n static #isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the local cache or from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} params - request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server. The goal is to load continous range of messages\n * covering at least between 'min' and 'max' + one full page forward (newer = true) or backwards\n * (newer=false).\n * @memberof Tinode.Topic#\n *\n * @param {number} limit - number of messages to get.\n * @param {Array.} gaps - ranges of messages to load.\n * @param {number} min - if non-negative, request newer messages with seq >= min.\n * @param {number} max - if positive, request older messages with seq < max.\n * @param {boolean} newer - if true, fetch newer messages; if false, fetch older messages.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMessagesPage(limit, gaps, min, max, newer) {\n let query = gaps ?\n this.startMetaQuery().withDataRanges(gaps, limit) :\n newer ?\n this.startMetaQuery().withData(min, undefined, limit) :\n this.startMetaQuery().withData(undefined, max, limit);\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then(count => {\n // Recalculate missing ranges.\n gaps = this.msgHasMoreMessages(min, max, newer);\n if (gaps.length == 0) {\n // All messages loaded.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = this.startMetaQuery().withDataRanges(gaps, limit);\n return this.getMeta(query.build());\n });\n }\n\n /**\n * Request to get pinned messages from the local cache or from the server.\n * @memberof Tinode.Topic#\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getPinnedMessages() {\n const pins = this.aux('pins');\n if (!Array.isArray(pins)) {\n return Promise.resolve(0);\n }\n\n const loaded = [];\n let remains = pins;\n // First try fetching from DB, then check deleted log, then ask the server.\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n })\n .then(msgs => {\n msgs.forEach(data => {\n // The 'data' could be undefined.\n if (data) {\n loaded.push(data.seq);\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n });\n if (loaded.length < pins.length) {\n // Some messages are missing, try dellog.\n remains = pins.filter(seq => !loaded.includes(seq));\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n });\n }\n return null;\n })\n .then(ranges => {\n if (ranges) {\n // Found some deleted ranges in dellog.\n remains.forEach(seq => {\n if (ranges.find(r => r.low <= seq && r.hi > seq)) {\n loaded.push(seq);\n }\n });\n }\n if (loaded.length == pins.length) {\n // Got all pinned messages from the local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: loaded.length\n }\n });\n }\n\n remains = pins.filter(seq => !loaded.includes(seq));\n return this.getMeta(this.startMetaQuery().withDataList(remains).build());\n });\n }\n\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params - parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n if (params.aux) {\n this._processMetaAux(params.aux);\n }\n if (params.react) {\n params.react.mrrid = ctrl.params?.mrrid | 0;\n this._processMetaReact(undefined, params.react);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subscriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Set message as pinned or unpinned by adding it to aux.pins array. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - seq ID of the message to pin or un-pin.\n * @param {boolean} pin - true to pin the message, false to un-pin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinMessage(seq, pin) {\n let pinned = this.aux('pins');\n if (!Array.isArray(pinned)) {\n pinned = [];\n }\n let changed = false;\n if (pin) {\n if (!pinned.includes(seq)) {\n changed = true;\n if (pinned.length == Const.MAX_PINNED_COUNT) {\n pinned.shift();\n }\n pinned.push(seq);\n }\n } else {\n if (pinned.includes(seq)) {\n changed = true;\n pinned = pinned.filter(id => id != seq);\n if (pinned.length == 0) {\n pinned = Const.DEL_CHAR;\n }\n }\n }\n if (changed) {\n return this.setMeta({\n aux: {\n pins: pinned\n }\n });\n }\n return Promise.resolve();\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.Topic#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n // Unsupported operation for non-me topics.\n return Promise.reject(new Error(\"Pinning topics is not supported here\"));\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.Topic#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n // Unsupported for non-me topics.\n return 0;\n }\n\n /**\n * Send or remove a reaction for a message in this topic.\n * If the same reaction from the current user is already present, remove it.\n * @memberof Tinode.Topic#\n *\n * @param {int} seq - ID of the message to react to.\n * @param {string} emo - Emoji string to add as reaction, or Tinode.DEL_CHAR to remove reaction.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n react(seq, emo) {\n if (!seq || !emo) {\n return Promise.reject(new Error(\"Invalid parameters\"));\n }\n const curr = this.msgMyReaction(seq);\n if (curr == emo) {\n // Treat the same value as toggle.\n emo = Const.DEL_CHAR;\n }\n return this.setMeta({\n react: {\n seq: seq,\n val: emo\n }\n });\n }\n\n /**\n * Get a list of allowed reactions for this topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Array.} Array of allowed reaction strings.\n */\n reactions() {\n const react = this.aux('react');\n if (react) {\n return react.vals;\n }\n return this._tinode.getServerParam(Const.REACTION_LIST);\n }\n\n /**\n * Mark all known reactions as seen.\n * @memberof Tinode.Topic#\n */\n markReactionsSeen() {\n if (this._mrrSeen != this.mrrid) {\n this._mrrSeen = this.mrrid;\n // Sent a notification to 'me' listeners.\n this._tinode.getMeTopic()._refreshContact('react', this);\n }\n }\n\n /**\n * Delete messages. Hard-deleting messages requires Deleter (D) permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n const tosend = normalizeRanges(ranges, this._maxSeq)\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = Math.max(ctrl.params.del, this._maxDel);\n this.clear = Math.max(ctrl.params.del, this.clear);\n }\n\n ranges.forEach(rec => {\n if (rec.hi) {\n this.flushMessageRange(rec.low, rec.hi);\n } else {\n this.flushMessage(rec.low);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n // Make a record.\n this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Send {del} message, return promise\n return this.delMessages(listToRanges(list), hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to acknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to acknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification that a video or audio message is being recorded. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param {boolean} audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification that a file is being uploaded. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param {boolean} type - true if file being uploaded.\n */\n noteUpload(type) {\n const types = {\n 'image': 'kpui',\n 'video': 'kpuv',\n 'file': 'kpu'\n };\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, types[type] || 'kpu');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {number} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get auxiliary entry by key.\n * @memberof Tinode.Topic#\n * @param {string} key - auxiliary data key to retrieve.\n * @return {Object} value for the key or undefined.\n */\n aux(key) {\n return this._aux[key];\n }\n /**\n * Get alias value (unique tag with alias: prefix), if present.\n * The prefix is stripped off.\n * @memberof Tinode.Topic#\n * @return {string} alias or undefined.\n */\n alias() {\n const alias = this._tags && this._tags.find(t => t.startsWith(Const.TAG_ALIAS));\n if (!alias) {\n return undefined;\n }\n // Remove 'alias:' prefix.\n return alias.substring(Const.TAG_ALIAS.length);\n }\n\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (Topic.#isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n if (msg._deleted) {\n // Skip deleted ranges.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by literal seq (does not resolve message edits).\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent non-deleted message from cache.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast(msg => !msg._deleted);\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n\n /**\n * Return reactions for the message with the given seq id if present.\n * @memberof Tinode.Topic#\n * @param {number} seq - message seq id.\n * @returns {Array} array of reaction objects or empty array.\n */\n msgReactions(seq) {\n const msg = this.findMessage(seq);\n if (!msg) {\n return [];\n }\n return msg.react || [];\n }\n\n /**\n * Return current user's reaction value for the given message.\n * @memberof Tinode.Topic#\n * @param {number} seq - message seq id.\n * @returns {string|null} current user's reaction value or null.\n */\n msgMyReaction(seq) {\n const reactions = this.msgReactions(seq);\n const me = this._tinode.getCurrentUserID();\n for (let i = 0; i < reactions.length; i++) {\n if ((reactions[i].users || []).includes(me)) {\n return reactions[i].val;\n }\n }\n return null;\n }\n\n /**\n * Check if topic has unseen reactions.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} true if there are unseen reactions, false otherwise.\n */\n hasUnseenReactions() {\n return this.mrrid > this._mrrSeen;\n }\n\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {number} min - smallest seq ID loaded range.\n * @param {number} max - greatest seq ID in loaded range.\n * @param {boolean} newer - if true, check for newer messages only.\n * @returns {Array.} - missing ranges in the selected direction.\n */\n msgHasMoreMessages(min, max, newer) {\n // Find gaps in cached messages.\n const gaps = [];\n if (min >= max) {\n return gaps;\n }\n let maxSeq = 0;\n let gap;\n this._messages.forEach((msg, prev) => {\n const p = prev || {\n seq: 0\n };\n const expected = p._deleted ? p.hi : p.seq + 1;\n if (msg.seq > expected) {\n gap = {\n low: expected,\n hi: msg.seq\n };\n } else {\n gap = null;\n }\n // If newer: collect all gaps from min to infinity.\n // If older: collect all gaps from max to zero.\n if (gap && (newer ? gap.hi >= min : gap.low < max)) {\n gaps.push(gap);\n }\n maxSeq = expected;\n });\n\n if (maxSeq < this.seq) {\n gap = {\n low: maxSeq + 1,\n hi: this.seq + 1\n };\n if (newer ? gap.hi >= min : gap.low < max) {\n gaps.push(gap);\n }\n }\n return gaps;\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a 'slf' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'slf' topic, false otherwise.\n */\n isSelfType() {\n return Topic.isSelfTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!Topic.#isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n const upd = {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n };\n if (data.head.vc) {\n upd.vc = true;\n }\n data.content = Drafty.updateVideoCall(data.content, upd);\n }\n\n // Normalize reactions payload if present: server uses 'react' field with array of\n // {value, count, users}.\n if (data.react) {\n let maxReact = 0;\n data.react = (data.react || []).map(r => {\n maxReact = Math.max(maxReact, r.mrrid);\n return {\n mrrid: r.mrrid,\n val: r.val,\n count: r.count | 0,\n users: Array.isArray(r.users) ? r.users.slice() : []\n };\n });\n if (this.mrrid < maxReact) {\n this.mrrid = maxReact;\n }\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (meta.aux) {\n this._processMetaAux(meta.aux);\n }\n if (meta.react) {\n this._processMetaReact(meta.react);\n }\n\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'aux':\n // Auxiliary data updated.\n this.getMeta(this.startMetaQuery().withAux().build());\n break;\n case 'react':\n // Reaction to message.\n this._processMetaReact(undefined, {\n mrrid: pres.id2 | 0,\n seq: pres.seq | 0,\n user: pres.act,\n val: pres.val,\n });\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is received, in response to received\n // {ctrl} after setMeta-sub, or as a handler for {pres what=sub}.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n if (!this._users[sub.user]) {\n // New subscription.\n this.subcnt++;\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n this.subcnt--;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is received.\n _processMetaTags(tags) {\n if (tags == Const.DEL_CHAR || (tags.length == 1 && tags[0] == Const.DEL_CHAR)) {\n tags = [];\n }\n this._tags = tags;\n this._tinode._db.updTopic(this);\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n\n // Called by Tinode when meta.aux is received.\n _processMetaAux(aux) {\n aux = (!aux || aux == Const.DEL_CHAR) ? {} : aux;\n this._aux = mergeObj(this._aux, aux);\n this._tinode._db.updTopic(this);\n if (this.onAuxUpdated) {\n this.onAuxUpdated(this._aux);\n }\n }\n\n // Handle an incremental reaction update for a message.\n // delta: {val, users: [user]}\n // The users could be empty or contain exactly one user.\n // 1. If user has already reacted with the same emoji, remove the reaction.\n // 2. If user has already reacted with a different emoji, change the reaction.\n // 3. If user has not reacted yet, add the reaction to the same emoji, if present.\n // 4. If user has not reacted yet, and no one reacted that way, create a new reaction.\n _handleReactionDiff(msg, delta) {\n const reacts = [...(msg.react || [])];\n // Find if the given user has already reacted.\n const user = delta.users[0];\n const found = user ? reacts.findIndex(r => r.users.includes(user)) : -1;\n if (found >= 0) {\n const existing = reacts[found];\n if (delta.val == Const.DEL_CHAR || existing.val == delta.val) {\n // Remove existing reaction.\n existing.count--;\n existing.mrrid = Math.max(existing.mrrid, delta.mrrid);\n if (existing.count <= 0) {\n reacts.splice(found, 1);\n } else {\n const userIdx = existing.users.indexOf(user);\n existing.users.splice(userIdx, 1);\n }\n } else {\n // User changed reaction.\n const userIdx = existing.users.indexOf(user);\n existing.users.splice(userIdx, 1);\n existing.count--;\n if (existing.count <= 0) {\n reacts.splice(found, 1);\n }\n // Add user reaction as a different emoji.\n const emoIndex = reacts.findIndex(r => r.val == delta.val);\n if (emoIndex >= 0) {\n // Add to existing reaction.\n reacts[emoIndex].users.push(user);\n reacts[emoIndex].count++;\n reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid);\n } else {\n // Create new reaction.\n reacts.push({\n mrrid: delta.mrrid,\n users: [user],\n count: 1,\n val: delta.val\n });\n }\n }\n } else if (delta.val != Const.DEL_CHAR) {\n // Existing user has not reacted yet.\n // Find reaction of the same type.\n const emoIndex = reacts.findIndex(r => r.val == delta.val);\n if (emoIndex >= 0) {\n // Add to existing reaction.\n if (user) {\n reacts[emoIndex].users.push(user);\n }\n reacts[emoIndex].count++;\n reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid);\n } else {\n // Create new reaction.\n reacts.push({\n mrrid: delta.mrrid,\n users: user ? [user] : [],\n count: 1,\n val: delta.val\n });\n }\n }\n return reacts;\n }\n\n // Called by Tinode when meta.aux is recived.\n _processMetaReact(reacts, oneReaction) {\n if (!Array.isArray(reacts)) {\n if (!oneReaction.seq || !oneReaction.val) {\n this._tinode.logger(\"WARNING: invalid reaction\");\n return;\n }\n reacts = [{\n _diff: true, // Indicate that this is a delta update.\n seq: oneReaction.seq,\n data: [{\n mrrid: oneReaction.mrrid,\n val: oneReaction.val,\n count: 1,\n users: [oneReaction.user || this._tinode.getCurrentUserID()]\n }]\n }];\n }\n // Process reactions metadata. meta.react is an array of {seq, data: [{val, count, users}]}\n const seqIds = [];\n reacts.forEach(mr => {\n const msg = this.findMessage(mr.seq);\n seqIds.push(mr.seq);\n if (msg) {\n let upd;\n if (mr._diff) {\n // Single incremental update.\n upd = this._handleReactionDiff(msg, mr.data[0]);\n } else {\n upd = (mr.data || []).map(r => ({\n mrrid: r.mrrid,\n val: r.val,\n count: r.count | 0,\n users: Array.isArray(r.users) ? r.users.slice() : []\n }));\n }\n msg.react = upd;\n const maxReact = upd.reduce((max, r) => Math.max(max, r.mrrid), 0);\n if (this.mrrid < maxReact) {\n this.mrrid = maxReact;\n }\n this._tinode._db.updMessageReact(this.name, mr.seq, msg.react);\n }\n });\n // Notify UI listeners of changes.\n if (this.onReact) {\n this.onReact(seqIds);\n }\n }\n\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(rec => {\n if (!rec.hi) {\n count++;\n this.flushMessage(rec.low);\n } else {\n count += rec.hi - rec.low;\n this.flushMessageRange(rec.low, rec.hi);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n this._tinode._db.addDelLog(this.name, clear, delseq);\n }\n\n if (count > 0) {\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._maxDel = 0;\n this._maxReact = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subscribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, query) {\n query = query || {};\n query.limit = query.limit || Const.DEFAULT_MESSAGES_PAGE;\n\n // Count of message loaded from DB.\n let count = 0;\n return db.readMessages(this.name, query)\n .then(msgs => {\n msgs.forEach(data => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n count = msgs.length;\n })\n .then(_ => db.readDelLog(this.name, query))\n .then(dellog => {\n return dellog.forEach(rec => {\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n })\n .then(_ => {\n // DEBUG\n return count;\n });\n }\n\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return dst;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n console.warn(\"Error merging property:\", prop, err);\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval) {\n cache[key] = mergeObj(cache[key], newval);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","export const PACKAGE_VERSION = \"0.26.0-alpha3\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Check if module exists (development only)\n\tif (__webpack_modules__[moduleId] === undefined) {\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2026 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.25\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport TheCard from './the-card.js';\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\n// Re-export TheCard\nexport {\n TheCard\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolean} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(this.logger, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics(data => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n this._db.maxDelId(topic.name).then(clear => {\n topic._maxDel = Math.max(topic._maxDel, clear || 0);\n });\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'aux': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys, slf.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\", \"slf\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param {Object} wsProvider - WebSocket provider, e.g. for nodeJS, require('ws').\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param {Object} idbProvider - indexedDB provider, e.g. for nodeJS, require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and its version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as opposite to being temporary locally assigned ID.\n * @param {number} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Parse user ID from a Tinode URL.\n *\n * @param {*} tinodeUrl\n * @returns {string} user ID extracted from the given Tinode URL or the original input if the URL cannot be parsed as tinode: URL.\n */\n static parseTinodeUrl(tinodeUrl) {\n if (!tinodeUrl || typeof tinodeUrl != 'string') {\n return null;\n }\n if (!tinodeUrl.startsWith('tinode:')) {\n return tinodeUrl;\n }\n const parts = tinodeUrl.substring(7).split(\"/\");\n if (parts.length < 2 || 'id' !== parts[parts.length - 2]) {\n return tinodeUrl;\n }\n return parts[parts.length - 1];\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param {Array.} tags - array of tags to modify.\n * @param {string} uniqueTag - tag to add, must be fully-qualified; if null or empty, no action is taken.\n * @returns {Array.} modified array of tags.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param {Array.} tags - array of tags to modify.\n * @param {string} prefix - prefix to remove.\n * @returns {Array.} array of tags without the ones with the given prefix.\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param {Array.} tags - array of tags to search.\n * @param {string} prefix - prefix to search for.\n * @returns {string} the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n /** Generates unique message IDs */\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} tags - Search tags.\n * @property {Object} aux - Auxiliary topic data.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n if (setParams.aux) {\n pkt.sub.set.aux = setParams.aux;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq ID equal or greater than this value.\n * @property {number=} before - Load messages with seq ID lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n * @property {Array.=} range - Ranges of seq IDs to fetch.\n */\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'aux', 'react'].forEach(key => {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs.\n *\n * @typedef SeqRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {Array.} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {number} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt);\n }\n\n /**\n * Send a 'react' note to indicate the user reacted to (or removed reaction from) a message.\n *\n * @param {string} topicName - Name of the topic where the message to react to was posted.\n * @param {int} seq - ID of the message to react to.\n * @param {string} emo - Emoji string to add as reaction, or Tinode.DEL_CHAR to remove reaction.\n */\n react(topicName, seq, emo) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'react';\n pkt.note.payload = {\n emo\n };\n this.#send(pkt);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name - name of the value to return.\n * @param {Object} defaultValue - value to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name - name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name - name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequent messages to server instructing it to send acknowledgements.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn acknowledgements on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = Const.MAX_MESSAGE_SIZE;\nTinode.MAX_SUBSCRIBER_COUNT = Const.MAX_SUBSCRIBER_COUNT;\nTinode.MIN_TAG_LENGTH = Const.MIN_TAG_LENGTH;\nTinode.MAX_TAG_LENGTH = Const.MAX_TAG_LENGTH;\nTinode.MAX_TAG_COUNT = Const.MAX_TAG_COUNT;\nTinode.MAX_FILE_UPLOAD_SIZE = Const.MAX_FILE_UPLOAD_SIZE;\nTinode.REQ_CRED_VALIDATORS = Const.REQ_CRED_VALIDATORS;\nTinode.MSG_DELETE_AGE = Const.MSG_DELETE_AGE;\nTinode.ICE_SERVERS = Const.ICE_SERVERS;\nTinode.REACTION_LIST = Const.REACTION_LIST;\n\n// Tinode URI topic ID prefix, 'scheme://[host]/path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:///id/';\nTinode.URI_TOPIC_ALIAS_PREFIX = 'tinode:///alias/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","filter","findLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","Math","max","min","call","find","nearest","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_SLF","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","MAX_PINNED_COUNT","TAG_ALIAS","TAG_EMAIL","TAG_PHONE","BACKOFF_BASE","BACKOFF_MAX_ITER","BACKOFF_JITTER","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","MSG_DELETE_AGE","ICE_SERVERS","REACTION_LIST","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onversionchange","onupgradeneeded","objectStoreNames","contains","createObjectStore","keyPath","dellog","indexNames","createIndex","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","updMessageReact","react","remMessages","from","to","range","readMessages","query","ranges","key","hi","low","msgs","concat","push","limit","openCursor","cursor","value","continue","addDelLog","delId","clear","readDelLog","entries","map","entry","maxDelId","index","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","DRAFTY_MIME_TYPE","DRAFTY_FR_MIME_TYPE","DRAFTY_FR_MIME_TYPE_LEGACY","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","TC","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","fn","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","entity","tp","offset","len","segments","segment","ele","toGraphemeValues","stringToGraphemes","s","correctAt","correctLen","isEmptyObject","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","appendTheCard","theCardData","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isFormResponseType","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","mimeType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","graphemes","spansToTree","flatten","child","addNode","n","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","dc","obj","graphemeIndices","graphemeIndex","charIndex","indices","module","exports","Const","Topic","mergeToCache","TopicFnd","_contacts","callbacks","_processMetaSubs","subs","updateCount","getOwnPropertyNames","indexBy","onMetaSub","onSubsUpdated","publish","setMeta","getPrototypeOf","prototype","checkTagUniqueness","caller","subscribe","desc","getMeta","startMetaQuery","withTags","build","meta","t","contacts","cb","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","substring","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","mergeObj","TopicMe","onContactUpdate","_processMetaDesc","turnOff","_db","_updateCachedUser","_myUID","cont","online","seen","when","Date","_refreshContact","onMetaDesc","cacheRemTopic","recv","getTopic","_new","isP2PTopicName","_cachePutUser","_noForwarding","_processMetaCreds","creds","cr","_credentials","findIndex","meth","done","resp","onCredsUpdated","_routePres","pres","what","_resetSub","withDesc","cacheGetTopic","_updateReceived","withLaterOneSub","tgt","dacs","touched","ua","_attached","_processMetaReact","mrrid","id2","actor","withOneSub","dummy","onPres","delCredential","method","isCommType","getContact","isArchived","private","arch","getCredentials","pinTopic","pin","isCommTopicName","tpin","unshift","pinnedTopicRank","listToRanges","normalizeRanges","MetaGetBuilder","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withDataRanges","withDataList","list","withEarlierData","_minSeq","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withLaterSub","withCred","withAux","withDel","withLaterDel","_maxDel","extract","THE_CARD_MIME_TYPE","TheCard","imageUrl","imageMimeType","note","theCard","merge","that","stringify","setFn","card","trim","getFn","setNote","setPhoto","matches","photo","ext","extLower","toLowerCase","mimeMap","getPhotoUrl","getOrg","org","setPhone","phone","addOrSetComm","setEmail","email","setTinodeID","tinodeID","addPhone","addEmail","addTinodeID","clearPhone","clearComm","clearEmail","clearTinodeID","getComm","proto","comm","getEmails","getPhones","getFirstTinodeID","comms","exportVCard","vcard","surname","additional","prefix","suffix","bday","d","year","y","String","padStart","month","day","types","des","importVCard","vcardStr","rawLines","currentLine","commMap","Map","unescapeValue","replace","char","decodeQuotedPrintable","bytes","hex","parseInt","uint8Array","TextDecoder","fromCharCode","keyPart","valueParts","keyParams","isQuotedPrintable","some","param","processedValue","dateStr","noHyphens","yy","cleaned","isValidMonth","isValidDay","isValidYear","encoding","pKey","pValue","typeParams","flatMap","equalIndex","valuesPart","mapKey","has","Set","isFileSupported","setOnly","normalizeArray","created","trusted","_users","_queuedSeqId","_noEarlierMsgs","_mrrSeen","_recvNotificationTimer","_aux","_messageVersions","_messages","_delayedLeaveTimer","onData","onMeta","onInfo","onTagsUpdated","onAuxUpdated","onReact","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isSelfTopicName","isGroupTopicName","isNewGroupTopicName","isChannelTopicName","isReplacementMsg","#isReplacementMsg","head","isSubscribed","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","createMessage","noEcho","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_cancelled","_fatal","leave","unsub","_gone","leaveDelayed","delay","getMessagesPage","gaps","newer","_loadMessages","msgHasMoreMessages","getPinnedMessages","pins","aux","remains","_processMetaTags","cred","_processMetaAux","subscriber","am","invite","archive","pinMessage","pinned","changed","emo","curr","msgMyReaction","reactions","vals","getServerParam","markReactionsSeen","delMessages","hard","tosend","del","rec","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","delMessagesEdits","messageVersions","delTopic","delSubscription","_updateMyReadRecv","noteRecv","noteRead","noteKeyPress","noteRecording","noteUpload","payload","oldVal","doUpdate","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","alias","origSeq","versions","messages","sinceId","beforeId","unused1","unused2","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgReactions","users","hasUnseenReactions","maxSeq","gap","prev","p","expected","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isMeType","isSelfType","isChannelType","isGroupType","isMe","targetSeq","targetMsg","outgoing","webrtc","incoming","vc","maxReact","_routeInfo","_routeMeta","_processDelMessages","delseq","isTopicCached","info","subcnt","_handleReactionDiff","delta","reacts","existing","userIdx","emoIndex","oneReaction","_diff","seqIds","mr","reduce","_allMessagesReceived","_maxReact","cached","date","isNaN","isValidDate","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","prop","console","warn","cache","newval","simplify","out","item","pos","ary","r1","r2","clipOutRange","clip","clipInRange","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","input","output","charCode","bc","bs","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","promise","persist","cacheGet","attachCacheToTopic","cachePut","all","args","dateString","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","parseTinodeUrl","tinodeUrl","isValidTagValue","ALIAS_REGEX","tagSplit","splitAt","setUniqueTag","uniqueTag","clearTagPrefix","tagByPrefix","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","URI_TOPIC_ID_PREFIX","URI_TOPIC_ALIAS_PREFIX"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/tinode.prod.js b/umd/tinode.prod.js index 73bd3e0a..3c052060 100644 --- a/umd/tinode.prod.js +++ b/umd/tinode.prod.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.tinode=t():e.tinode=t()}(this,function(){return function(){"use strict";var e={767:function(e){const t="text/x-drafty-fr",s=["act","height","duration","incoming","mime","name","premime","preref","preview","ref","size","state","url","val","width"],i=new Intl.Segmenter,n=[{name:"ST",start:/(?:^|[\W_])(\*)[^\s*]/,end:/[^\s*](\*)(?=$|[\W_])/},{name:"EM",start:/(?:^|\W)(_)[^\s_]/,end:/[^\s_](_)(?=$|\W)/},{name:"DL",start:/(?:^|[\W_])(~)[^\s~]/,end:/[^\s~](~)(?=$|[\W_])/},{name:"CO",start:/(?:^|\W)(`)[^`]/,end:/[^`](`)(?=$|\W)/}],r=["QQ"],a=[{name:"LN",dataName:"url",pack:function(e){return/^[a-z]+:\/\//i.test(e)||(e="http://"+e),{url:e}},re:/(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/gi},{name:"MN",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B@([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu},{name:"HT",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B#([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu}],o={AU:{html_tag:"audio",md_tag:void 0,isVoid:!1},BN:{html_tag:"button",md_tag:void 0,isVoid:!1},BR:{html_tag:"br",md_tag:"\n",isVoid:!0},CO:{html_tag:"tt",md_tag:"`",isVoid:!1},DL:{html_tag:"del",md_tag:"~",isVoid:!1},EM:{html_tag:"i",md_tag:"_",isVoid:!1},EX:{html_tag:"",md_tag:void 0,isVoid:!0},FM:{html_tag:"div",md_tag:void 0,isVoid:!1},HD:{html_tag:"",md_tag:void 0,isVoid:!1},HL:{html_tag:"span",md_tag:void 0,isVoid:!1},HT:{html_tag:"a",md_tag:void 0,isVoid:!1},IM:{html_tag:"img",md_tag:void 0,isVoid:!1},LN:{html_tag:"a",md_tag:void 0,isVoid:!1},MN:{html_tag:"a",md_tag:void 0,isVoid:!1},RW:{html_tag:"div",md_tag:void 0,isVoid:!1},QQ:{html_tag:"div",md_tag:void 0,isVoid:!1},ST:{html_tag:"b",md_tag:"*",isVoid:!1},VC:{html_tag:"div",md_tag:void 0,isVoid:!1},VD:{html_tag:"video",md_tag:void 0,isVoid:!1}};function h(e,t,s){if(!e)return null;try{const s=atob(e),i=s.length,n=new ArrayBuffer(i),r=new Uint8Array(n);for(let e=0;e"",close:e=>""},EM:{open:e=>"",close:e=>""},DL:{open:e=>"",close:e=>""},CO:{open:e=>"",close:e=>""},BR:{open:e=>"
    ",close:e=>""},HD:{open:e=>"",close:e=>""},HL:{open:e=>'',close:e=>""},LN:{open:e=>'',close:e=>"",props:e=>e?{href:e.url,target:"_blank"}:null},MN:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},HT:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},BN:{open:e=>"",props:e=>e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null},AU:{open:e=>'",props:e=>e?{src:e.ref||h(e.val,e.mime,l.logger),"data-preload":e.ref?"metadata":"auto","data-duration":e.duration,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},IM:{open:e=>{const t=c(e._tempPreview,e.mime),s=h(e.val,e.mime,l.logger),i=e.ref||s;return(e.name?'':"")+''},close:e=>e.name?"":"",props:e=>e?{src:c(e._tempPreview,e.mime)||e.ref||h(e.val,e.mime,l.logger),title:e.name,alt:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},FM:{open:e=>"
    ",close:e=>"
    "},RW:{open:e=>"
    ",close:e=>"
    "},QQ:{open:e=>"
    ",close:e=>"
    ",props:e=>e?{}:null},VC:{open:e=>"
    ",close:e=>"
    ",props:e=>e?{"data-duration":e.duration,"data-state":e.state}:{}},VD:{open:e=>{const t=c(e._tempPreview,e.mime),s=e.ref||h(e.preview,e.premime||"image/jpeg",l.logger);return''},close:e=>"",props:e=>{if(!e)return null;const t=e.preref||h(e.preview,e.premime||"image/jpeg",l.logger);return{src:t,"data-src":e.ref||h(e.val,e.mime,l.logger),"data-width":e.width,"data-height":e.height,"data-preload":e.ref?"metadata":"auto","data-preview":t,"data-duration":0|e.duration,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}}}},l=function(){this.txt="",this.fmt=[],this.ent=[]};function u(e,t,s,i){const n=[];if(0==i.length)return[];for(let s in i){const r=i[s];r.at>t&&n.push({txt:e.slice(t,r.at)});const a={tp:r.tp},o=u(e,r.at+1,r.end,r.children);o.length>0?a.children=o:a.txt=r.txt,n.push(a),t=r.end+1}return ts.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=p(t[e].children);return t}function g(e){if(!e)return null;e="string"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||"",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const n=[],a=[];s.forEach(e=>{if(!e||"object"!=typeof e)return;if(!["undefined","number"].includes(typeof e.at))return;if(!["undefined","number"].includes(typeof e.len))return;let s=0|e.at,r=0|e.len;if(r<0)return;let o=e.key||0;i.length>0&&("number"!=typeof o||o<0||o>=i.length)||(s<=-1?a.push({start:-1,end:0,key:o}):s+r>E(t).length||(e.tp?n.push({type:e.tp,start:s,end:s+r}):i.length>0&&"object"==typeof i[o]&&n.push({start:s,end:s+r,key:o})))}),n.sort((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:r.indexOf(t.type)-r.indexOf(e.type))}),a.length>0&&n.push(...a),n.forEach(e=>{i.length>0&&!e.type&&i[e.key]&&"object"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type="HD")});const o=E(t);let h=f({},o,0,o.length,n);return h=b(h,function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e}),h}function m(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function f(e,t,s,i,n){if(!n||0==n.length)return se.segment).join("")}),e;for(let i=0;ie.segment).join("")}),s=r.start);const a=[];for(;ie.segment).join("")}),e}function _(e,t,s){if(!t)return e;e.txt=e.txt||"";const i=E(e.txt).length;if(t.text?e.txt+=t.text:Array.isArray(t.children)&&t.children.forEach(t=>{_(e,t,s)}),t.type){const n=E(e.txt).length-i;if(e.fmt=e.fmt||[],Object.keys(t.data||{}).length>0){e.ent=e.ent||[];const r=void 0===s[t.key]?e.ent.length:s[t.key];s[t.key]=r,e.ent[r]={tp:t.type,data:t.data},t.att?e.fmt.push({at:-1,len:0,key:r}):e.fmt.push({at:i,len:n,key:r})}else e.fmt.push({tp:t.type,at:i,len:n})}return e}function b(e,t,s){if(!e)return null;let i=t.call(s,e);if(!i||!i.children)return i;const n=[];for(let e in i.children){let r=i.children[e];r&&(r=b(r,t,s),r&&n.push(r))}return 0==n.length?i.children=null:i.children=n,i}function w(e,t,s,i,n){if(!e)return null;i&&e.type&&i.push(e.type);let r=[];for(let s in e.children){const a=w(e.children[s],t,s,i,n);a&&r.push(a)}return 0==r.length&&(r=e.text?[e.text]:null),i&&e.type&&i.pop(),t.call(n,e.type,e.data,r,s,i)}function v(e,t,s){return e?(s&&(t-=s.length),b(e,function(e){if(t<=-1)return null;if(e.att)return e;if(0==t)e.text=s,t=-1;else if(e.text){const i=E(e.text);i.length>t?(e.text=i.slice(0,t).map(e=>e.segment).join("")+s,t=-1):t-=i.length}return e})):null}function y(e,t){return b(e,e=>{const s=S(e.data,!0,t?t(e):null);return s?e.data=s:delete e.data,e})}function M(e){if("BR"==e.type)e=null;else if(e.text)e.type||(e.text=e.text.trimStart(),e.text||(e=null));else if(!e.type&&e.children&&e.children.length>0){const t=M(e.children[0]);t?e.children[0]=t:(e.children.shift(),e.type||0!=e.children.length||(e=null))}return e}function x(e,t){if(!e)return null;if(e.att)e.text=" ",delete e.att,delete e.children;else if(e.children){const s=[],i=[];for(let n in e.children){const r=e.children[n];if(r.att){if(s.length==t)continue;if(l.isFormResponseType(r.data.mime))continue;delete r.att,delete r.children,r.text=" ",s.push(r)}else i.push(r)}e.children=i.concat(s)}return e}function T(e,t){let s="",i=[];for(let n in e){const r=e[n];if(!r.txt){const e=T(r.children,s.length+t);r.txt=e.txt,i=i.concat(e.fmt)}r.tp&&i.push({at:s.length+t,len:r.txt.length,tp:r.tp}),s+=r.txt}return{txt:s,fmt:i}}function S(e,t,i){if(e&&Object.entries(e).length>0){i=i||[];const n={};if(s.forEach(s=>{if(e[s]){if(t&&!i.includes(s)&&("string"==typeof e[s]||Array.isArray(e[s]))&&e[s].length>64)return;if("object"==typeof e[s])return;n[s]=e[s]}}),0!=Object.entries(n).length)return n}return null}function P(e){return 0==Object.keys(e??{}).length}function A(e,t,s){const n=function(e){const t=[];let s=0,i=0;for(const{segment:n}of e){for(let e=0;e{let t,i,h=[];if(n.forEach(t=>{h=h.concat(function(e,t,s,i){const n=[];let r=0,a=e.slice(0);for(;a.length>0;){const o=t.exec(a);if(null==o)break;let h=o.index+o[0].lastIndexOf(o[1]);a=a.slice(h+1),h+=r,r=h+1;const c=s?s.exec(a):null;if(null==c)break;let d=c.index+c[0].indexOf(c[1]);a=a.slice(d+1),d+=r,r=d+1,n.push({txt:e.slice(h+1,d),children:[],at:h,end:d,tp:i})}return n}(e,t.start,t.end,t.name))}),0==h.length)i={txt:e};else{h.sort((e,t)=>{const s=e.at-t.at;return 0!=s?s:t.end-e.end}),h=p(h);const t=T(u(e,0,e.length,h),0);i={txt:t.txt,fmt:t.fmt}}if(t=function(e){let t,s=[];if(a.forEach(i=>{for(;null!==(t=i.re.exec(e));)s.push({offset:t.index,len:t[0].length,unique:t[0],data:i.pack(t[0]),type:i.name})}),0==s.length)return s;s.sort((e,t)=>e.offset-t.offset);let i=-1;return s=s.filter(e=>{const t=e.offset>i;return i=e.offset+e.len,t}),s}(i.txt),t.length>0){const e=[];for(let i in t){const n=t[i];let a=r[n.unique];a||(a=s.length,r[n.unique]=a,s.push({tp:n.type,data:n.data})),e.push({at:n.offset,len:n.len,key:a})}i.ent=e}o.push(i)});const h={txt:""};if(o.length>0){if(h.txt=o[0].txt,h.fmt=(o[0].fmt||[]).concat(o[0].ent||[]),h.fmt.length){const e=i.segment(h.txt);for(const t of h.fmt)({at:t.at,len:t.len}=A(t,e,h.txt))}for(let e=1;e{const{at:i,len:r}=A(e,n,t.txt);return e.at=i+s,e.len=r,e}))),t.ent&&(P(n)&&(n=i.segment(t.txt)),h.fmt=h.fmt.concat(t.ent.map(e=>{const{at:i,len:r}=A(e,n,t.txt);return e.at=i+s,e.len=r,e})))}0==h.fmt.length&&delete h.fmt,s.length>0&&(h.ent=s)}return h},l.append=function(e,t){if(!e)return t;if(!t)return e;e.txt=e.txt||"";const s=E(e.txt).length;return"string"==typeof t?e.txt+=t:t.txt&&(e.txt+=t.txt),Array.isArray(t.fmt)&&(e.fmt=e.fmt||[],Array.isArray(t.ent)&&(e.ent=e.ent||[]),t.fmt.forEach(i=>{const n={at:(0|i.at)+s,len:0|i.len};-1==i.at&&(n.at=-1,n.len=0),i.tp?n.tp=i.tp:(n.key=e.ent.length,e.ent.push(t.ent[i.key||0])),e.fmt.push(n)})),e},l.insertImage=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"IM",data:{mime:s.mime,ref:s.refurl,val:s.bits||s.preview,width:s.width,height:s.height,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},l.insertVideo=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"VD",data:{mime:s.mime,ref:s.refurl,val:s.bits,preref:s.preref,preview:s.preview,width:s.width,height:s.height,duration:0|s.duration,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e[0],i.data.preref=e[1],i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},l.insertAudio=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"AU",data:{mime:s.mime,val:s.bits,duration:0|s.duration,preview:s.preview,name:s.filename,size:0|s.size,ref:s.refurl}};return s.urlPromise&&(i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},l.videoCall=function(e){return{txt:" ",fmt:[{at:0,len:1,key:0}],ent:[{tp:"VC",data:{aonly:e}}]}},l.updateVideoCall=function(e,t){const s=((e||{}).fmt||[])[0];if(!s)return e;let i;if("VC"==s.tp)delete s.tp,s.key=0,i={tp:"VC"},e.ent=[i];else if(i=(e.ent||[])[0|s.key],!i||"VC"!=i.tp)return e;return i.data=i.data||{},Object.assign(i.data,t),e},l.quote=function(e,t,s){const i=l.append(l.appendLineBreak(l.mention(e,t)),s);return i.fmt.push({at:0,len:E(i.txt).length,tp:"QQ"}),i},l.mention=function(e,t){return{txt:e||"",fmt:[{at:0,len:E(e||"").length,key:0}],ent:[{tp:"MN",data:{val:t}}]}},l.appendLink=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:e.txt.length,len:t.txt.length,key:e.ent.length}),e.txt+=t.txt;const s={tp:"LN",data:{url:t.url}};return e.ent.push(s),e},l.appendImage=function(e,t){return(e=e||{txt:""}).txt+=" ",l.insertImage(e,e.txt.length-1,t)},l.appendAudio=function(e,t){return(e=e||{txt:""}).txt+=" ",l.insertAudio(e,e.txt.length-1,t)},l.attachFile=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:-1,len:0,key:e.ent.length});const s={tp:"EX",data:{mime:t.mime,val:t.data,name:t.filename,ref:t.refurl,size:0|t.size}};return t.urlPromise&&(s.data._processing=!0,t.urlPromise.then(e=>{s.data.ref=e,s.data._processing=void 0},e=>{s.data._processing=void 0})),e.ent.push(s),e},l.wrapInto=function(e,t,s,i){return"string"==typeof e&&(e={txt:e}),e.fmt=e.fmt||[],e.fmt.push({at:s||0,len:i||e.txt.length,tp:t}),e},l.wrapAsForm=function(e,t,s){return l.wrapInto(e,"FM",t,s)},l.insertButton=function(e,t,s,i,n,r,a){return"string"==typeof e&&(e={txt:e}),!e||!e.txt||e.txt.length{switch(e.type){case"IM":return["val"];case"VD":return["preview"]}return null}),_({},s,[])):e},l.preview=function(e,t,s){let i=g(e);if(i=x(i,3),i=b(i,function(e){return"MN"==e.type?e.parent&&e.parent.type||!(e.text||"").startsWith("➦")||(e.text="➦",delete e.children):"QQ"==e.type?(e.text=" ",delete e.children):"BR"==e.type&&(e.text=" ",delete e.children,delete e.type),e}),i=v(i,t,"…"),s){const e={IM:["val"],VD:["preview"]};i=y(i,t=>e[t.type])}else i=y(i);return _({},i,[])},l.toPlainText=function(e){return"string"==typeof e?e:e.txt},l.isPlainText=function(e){return"string"==typeof e||!(e.fmt||e.ent)},l.toMarkdown=function(e){return w(g(e),function(e,t,s){const i=o[e];let n=s?s.join(""):"";return i&&(i.isVoid?n=i.md_tag||"":i.md_tag&&(n=i.md_tag+n+i.md_tag)),n},0)},l.isValid=function(e){if(!e)return!1;const{txt:t,fmt:s,ent:i}=e;if(!t&&""!==t&&!s&&!i)return!1;const n=typeof t;return!("string"!=n&&"undefined"!=n&&null!==t||void 0!==s&&!Array.isArray(s)&&null!==s||void 0!==i&&!Array.isArray(i)&&null!==i)},l.hasAttachments=function(e){if(!Array.isArray(e.fmt))return!1;for(let t in e.fmt){const s=e.fmt[t];if(s&&s.at<0){const t=e.ent[0|s.key];return t&&"EX"==t.tp&&t.data}}return!1},l.attachments=function(e,t,s){if(!Array.isArray(e.fmt))return;let i=0;for(let n in e.fmt){let r=e.fmt[n];if(r&&r.at<0){const n=e.ent[0|r.key];if(n&&"EX"==n.tp&&n.data&&t.call(s,n.data,i++,"EX"))break}}},l.hasEntities=function(e){return e.ent&&e.ent.length>0},l.entities=function(e,t,s){if(e.ent&&e.ent.length>0)for(let i in e.ent)if(e.ent[i]&&t.call(s,e.ent[i].data,i,e.ent[i].tp))break},l.styles=function(e,t,s){if(e.fmt&&e.fmt.length>0)for(let i in e.fmt){const n=e.fmt[i];if(n&&t.call(s,n.tp,n.at,n.len,n.key,i))break}},l.sanitizeEntities=function(e){if(e&&e.ent&&e.ent.length>0)for(let t in e.ent){const s=e.ent[t];if(s&&s.data){const i=S(s.data);i?e.ent[t].data=i:delete e.ent[t].data}}return e},l.getDownloadUrl=function(e){let t=null;return!l.isFormResponseType(e.mime)&&e.val?t=h(e.val,e.mime,l.logger):"string"==typeof e.ref&&(t=e.ref),t},l.isProcessing=function(e){return!!e._processing},l.getPreviewUrl=function(e){return e.val?h(e.val,e.mime,l.logger):null},l.getEntitySize=function(e){return e.size?e.size:e.val?.75*e.val.length|0:0},l.getEntityMimeType=function(e){return e.mime||"text/plain"},l.tagName=function(e){return o[e]&&o[e].html_tag},l.attrValue=function(e,t){if(t&&d[e]&&d[e].props)return d[e].props(t)},l.getContentType=function(){return"text/x-drafty"},l.isFormResponseType=function(e){return e===t||"application/json"===e},e.exports=l}},t={};function s(i){var n=t[i];if(void 0!==n)return n.exports;var r=t[i]={exports:{}};return e[i](r,r.exports,s),r.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};s.r(i),s.d(i,{AccessMode:function(){return n},Drafty:function(){return q()},Tinode:function(){return Q}});class n{constructor(e){e&&(this.given="number"==typeof e.given?e.given:n.decode(e.given),this.want="number"==typeof e.want?e.want:n.decode(e.want),this.mode=e.mode?"number"==typeof e.mode?e.mode:n.decode(e.mode):this.given&this.want)}static#e(e,t,s){if(["given","want","mode"].includes(t=t||"mode"))return 0!=(e[t]&s);throw new Error(`Invalid AccessMode component '${t}'`)}static decode(e){if(!e)return null;if("number"==typeof e)return e&n._BITMASK;if("N"===e||"n"===e)return n._NONE;const t={J:n._JOIN,R:n._READ,W:n._WRITE,P:n._PRES,A:n._APPROVE,S:n._SHARE,D:n._DELETE,O:n._OWNER};let s=n._NONE;for(let i=0;i=20&&t.length<=24&&["ts","touched","updated","created","when","deleted","expires"].includes(e)){const e=new Date(t);if(!isNaN(e))return e}else if("acs"===e&&"object"==typeof t)return new n(t);return t}function _(e){return e&&!/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(e)}function b(e){return e instanceof Date&&!isNaN(e)&&0!=e.getTime()}function w(e,t){if("object"!=typeof t){if(void 0===t)return e;if(t===p)return;return t}if(null===t)return e;if(t instanceof Date&&!isNaN(t))return!e||!(e instanceof Date)||isNaN(e)||e{"_"==t[0]?delete e[t]:e[t]?Array.isArray(e[t])&&0==e[t].length?delete e[t]:e[t]?e[t]instanceof Date?b(e[t])||delete e[t]:"object"==typeof e[t]&&(y(e[t]),0==Object.getOwnPropertyNames(e[t]).length&&delete e[t]):delete e[t]:delete e[t]}),e}function M(e,t){return Array.isArray(e)?(e.sort((e,t)=>e.low(s.low0&&(!s.hi||s.hi{if(0==e.length)e.push(t);else{let s=e[e.length-1];t.low<=s.hi?s.hi=Math.max(s.hi,t.hi):e.push(t)}return e},[])):[]}function x(e){return e.sort((e,t)=>e-t),e.reduce((e,t)=>{if(0==e.length)e.push({low:t});else{let s=e[e.length-1];!s.hi&&t!=s.low+1||t>s.hi?e.push({low:t}):s.hi=s.hi?Math.max(s.hi,t+1):t+1}return e},[])}let T,S;const P="Connection failed",A=418,E="Disconnected by client";function D(e,t,s,i){let n=null;return["http","https","ws","wss"].includes(t)&&(n=`${t}://${e}`,"/"!==n.charAt(n.length-1)&&(n+="/"),n+="v"+s+"/channels",["http","https"].includes(t)&&(n+="/lp"),n+="?apikey="+i),n}class R{static#t=e=>{};#s=null;#i=0;#n=!1;#r=null;host;secure;apiKey;version;autoreconnect;initialized;constructor(e,t,s){if(this.host=e.host,this.secure=e.secure,this.apiKey=e.apiKey,this.version=t,this.autoreconnect=s,"lp"===e.transport?(this.#a(),this.initialized="lp"):"ws"===e.transport&&(this.#o(),this.initialized="ws"),!this.initialized)throw R.#t("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'."),new Error("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.")}static setNetworkProviders(e,t){T=e,S=t}static set logger(e){R.#t=e}connect(e,t){return Promise.reject(null)}reconnect(e){}disconnect(){}sendText(e){}isConnected(){return!1}transport(){return this.initialized}probe(){this.sendText("1")}backoffReset(){this.#h()}#c(){clearTimeout(this.#s);const e=Math.pow(2,this.#i)*(1+.3*Math.random())*2e3;this.#i=this.#i>=10?this.#i:this.#i+1,this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e),this.#s=setTimeout(t=>{if(R.#t(`Reconnecting, iter=${this.#i}, timeout=${e}`),this.#n)this.onAutoreconnectIteration&&this.onAutoreconnectIteration(-1);else{const e=this.connect();this.onAutoreconnectIteration?this.onAutoreconnectIteration(0,e):e.catch(e=>{})}},e)}#d(){clearTimeout(this.#s),this.#s=null}#h(){this.#i=0}#a(){let e=null,t=null,s=null,i=(t,s,n)=>{let r=new S,a=!1;return r.onreadystatechange=o=>{if(4==r.readyState)if(201==r.status){let n=JSON.parse(r.responseText,f);e=t+"&sid="+n.ctrl.params.sid,r=i(e),r.send(null),this.onOpen&&this.onOpen(),s&&(a=!0,s()),this.autoreconnect&&this.#d()}else if(r.status>0&&r.status<400)this.onMessage&&this.onMessage(r.responseText),r=i(e),r.send(null);else{if(n&&!a&&(a=!0,n(r.responseText)),this.onMessage&&r.responseText&&this.onMessage(r.responseText),this.onDisconnect){const e=r.status||(this.#n?A:503),t=r.responseText||(this.#n?E:P);this.onDisconnect(new m(t,e),e)}r=null,!this.#n&&this.autoreconnect&&this.#c()}},r.open("POST",t,!0),r};this.connect=(e,s)=>{if(this.#n=!1,t){if(!s)return Promise.resolve();t.onreadystatechange=void 0,t.abort(),t=null}return e&&(this.host=e),new Promise((e,s)=>{const n=D(this.host,this.secure?"https":"http",this.version,this.apiKey);R.#t("LP connecting to:",n),t=i(n,e,s),t.send(null)}).catch(e=>{R.#t("LP connection failed:",e)})},this.reconnect=e=>{this.#d(),this.connect(null,e)},this.disconnect=i=>{this.#n=!0,this.#d(),s&&(s.onreadystatechange=void 0,s.abort(),s=null),t&&(t.onreadystatechange=void 0,t.abort(),t=null),this.onDisconnect&&this.onDisconnect(new m(E,A),A),e=null},this.sendText=t=>{if(s=(e=>{const t=new S;return t.onreadystatechange=e=>{if(4==t.readyState&&t.status>=400)throw new m("LP sender failed",t.status)},t.open("POST",e,!0),t})(e),!s||1!=s.readyState)throw new Error("Long poller failed to connect");s.send(t)},this.isConnected=e=>t&&!0}#o(){this.connect=(e,t)=>{if(this.#n=!1,this.#r){if(!t&&this.#r.readyState==this.#r.OPEN)return this.probe(),Promise.resolve();this.#r.close(),this.#r=null}return e&&(this.host=e),new Promise((e,t)=>{const s=D(this.host,this.secure?"wss":"ws",this.version,this.apiKey);R.#t("WS connecting to: ",s);const i=new T(s);i.onerror=e=>{t(e)},i.onopen=t=>{this.autoreconnect&&this.#d(),this.onOpen&&this.onOpen(),e()},i.onclose=e=>{if(this.#r=null,this.onDisconnect){const e=this.#n?A:503;this.onDisconnect(new m(this.#n?E:P,e),e)}!this.#n&&this.autoreconnect&&this.#c()},i.onmessage=e=>{this.onMessage&&this.onMessage(e.data)},this.#r=i})},this.reconnect=e=>{this.#d(),this.connect(null,e)},this.disconnect=e=>{this.#n=!0,this.#d(),this.#r&&(this.#r.close(),this.#r=null)},this.sendText=e=>{if(!this.#r||this.#r.readyState!=this.#r.OPEN)throw new Error("Websocket is not connected");this.#r.send(e)},this.isConnected=e=>this.#r&&this.#r.readyState==this.#r.OPEN}onMessage=void 0;onDisconnect=void 0;onOpen=void 0;onAutoreconnectIteration=void 0}R.NETWORK_ERROR=503,R.NETWORK_ERROR_TEXT=P,R.NETWORK_USER=A,R.NETWORK_USER_TEXT=E;const N="tinode-web";let k;class I{#l=e=>{};#u=e=>{};db=null;disabled=!0;constructor(e,t){this.#l=e||this.#l,this.#u=t||this.#u}#p(e,t,s){return this.db?new Promise((i,n)=>{const r=this.db.transaction([e]);r.onerror=t=>{this.#u("PCache","mapObjects",e,t.target.error),n(t.target.error)},r.objectStore(e).getAll().onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}initDatabase(){return new Promise((e,t)=>{const s=k.open(N,3);s.onsuccess=t=>{this.db=t.target.result,this.disabled=!1,this.db.onversionchange=e=>{this.#u("PCache","another tab tries to upgrade DB, shutting down"),this.db.close(),this.db=null,this.disabled=!0},e(this.db)},s.onerror=e=>{this.#u("PCache","failed to initialize",e),t(e.target.error),this.#l(e.target.error)},s.onupgradeneeded=e=>{if(this.db=e.target.result,this.db.onerror=e=>{this.#u("PCache","failed to create storage",e),this.#l(e.target.error)},this.db.objectStoreNames.contains("topic")||this.db.createObjectStore("topic",{keyPath:"name"}),this.db.objectStoreNames.contains("user")||this.db.createObjectStore("user",{keyPath:"uid"}),this.db.objectStoreNames.contains("subscription")||this.db.createObjectStore("subscription",{keyPath:["topic","uid"]}),this.db.objectStoreNames.contains("message")||this.db.createObjectStore("message",{keyPath:["topic","seq"]}),!this.db.objectStoreNames.contains("dellog")){const e=this.db.createObjectStore("dellog",{keyPath:["topic","low","hi"]});e.indexNames.contains("topic_clear")||e.createIndex("topic_clear",["topic","clear"],{unique:!1})}}})}deleteDatabase(){return this.db&&(this.db.close(),this.db=null),new Promise((e,t)=>{const s=k.deleteDatabase(N);s.onblocked=e=>{this.db&&this.db.close();const s=new Error("blocked");this.#u("PCache","deleteDatabase",s),t(s)},s.onsuccess=t=>{this.db=null,this.disabled=!0,e(!0)},s.onerror=e=>{this.#u("PCache","deleteDatabase",e.target.error),t(e.target.error)}})}isReady(){return!!this.db}updTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["topic"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","updTopic",e.target.error),s(e.target.error)};const n=i.objectStore("topic").get(e.name);n.onsuccess=t=>{i.objectStore("topic").put(I.#g(n.result,e)),i.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}markTopicAsDeleted(e,t){return this.isReady()?new Promise((s,i)=>{const n=this.db.transaction(["topic"],"readwrite");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u("PCache","markTopicAsDeleted",e.target.error),i(e.target.error)},n.objectStore("topic").get(e).onsuccess=e=>{const s=e.target.result;s&&s._deleted!=t&&(s._deleted=t,n.objectStore("topic").put(s)),n.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["topic","subscription","message"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remTopic",e.target.error),s(e.target.error)},i.objectStore("topic").delete(IDBKeyRange.only(e)),i.objectStore("subscription").delete(IDBKeyRange.bound([e,"-"],[e,"~"])),i.objectStore("message").delete(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER])),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapTopics(e,t){return this.#p("topic",e,t)}deserializeTopic(e,t){I.#m(e,t)}updUser(e,t){if(!(arguments.length<2||void 0===t))return this.isReady()?new Promise((s,i)=>{const n=this.db.transaction(["user"],"readwrite");n.oncomplete=e=>{s(e.target.result)},n.onerror=e=>{this.#u("PCache","updUser",e.target.error),i(e.target.error)},n.objectStore("user").put({uid:e,public:t}),n.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["user"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remUser",e.target.error),s(e.target.error)},i.objectStore("user").delete(IDBKeyRange.only(e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapUsers(e,t){return this.#p("user",e,t)}getUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["user"]);i.oncomplete=e=>{const s=e.target.result;t({user:s.uid,public:s.public})},i.onerror=e=>{this.#u("PCache","getUser",e.target.error),s(e.target.error)},i.objectStore("user").get(e)}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updSubscription(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction(["subscription"],"readwrite");r.oncomplete=e=>{i(e.target.result)},r.onerror=e=>{this.#u("PCache","updSubscription",e.target.error),n(e.target.error)},r.objectStore("subscription").get([e,t]).onsuccess=i=>{r.objectStore("subscription").put(I.#f(i.target.result,e,t,s)),r.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapSubscriptions(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction(["subscription"]);r.onerror=e=>{this.#u("PCache","mapSubscriptions",e.target.error),n(e.target.error)},r.objectStore("subscription").getAll(IDBKeyRange.bound([e,"-"],[e,"~"])).onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}addMessage(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["message"],"readwrite");i.onsuccess=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","addMessage",e.target.error),s(e.target.error)},i.objectStore("message").add(I.#_(null,e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updMessageStatus(e,t,s){return this.isReady()?new Promise((i,n)=>{const r=this.db.transaction(["message"],"readwrite");r.onsuccess=e=>{i(e.target.result)},r.onerror=e=>{this.#u("PCache","updMessageStatus",e.target.error),n(e.target.error)};const a=r.objectStore("message").get(IDBKeyRange.only([e,t]));a.onsuccess=i=>{const n=a.result||i.target.result;n&&n._status!=s?(r.objectStore("message").put(I.#_(n,{topic:e,seq:t,_status:s})),r.commit()):r.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remMessages(e,t,s){return this.isReady()?new Promise((i,n)=>{t||s||(t=0,s=Number.MAX_SAFE_INTEGER);const r=s>0?IDBKeyRange.bound([e,t],[e,s],!1,!0):IDBKeyRange.only([e,t]),a=this.db.transaction(["message"],"readwrite");a.onsuccess=e=>{i(e.target.result)},a.onerror=e=>{this.#u("PCache","remMessages",e.target.error),n(e.target.error)},a.objectStore("message").delete(r),a.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readMessages(e,t,s,i){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"));const n=this.db.transaction(["message"]);let r=[];return Array.isArray(t.ranges)?new Promise((a,o)=>{n.onerror=e=>{this.#u("PCache","readMessages",e.target.error),o(e.target.error)};let h=0;t.ranges.forEach(o=>{const c=o.hi?IDBKeyRange.bound([e,o.low],[e,o.hi],!1,!0):IDBKeyRange.only([e,o.low]);n.objectStore("message").getAll(c).onsuccess=e=>{const n=e.target.result;n&&(s&&s.call(i,n),Array.isArray(n)?r=r.concat(n):r.push(n)),h++,h==t.ranges.length&&a(r)}})}):new Promise((a,o)=>{const h=t.since>0?t.since:0,c=t.before>0?t.before:Number.MAX_SAFE_INTEGER,d=0|t.limit;n.onerror=e=>{this.#u("PCache","readMessages",e.target.error),o(e.target.error)};const l=IDBKeyRange.bound([e,h],[e,c],!1,!0);n.objectStore("message").openCursor(l,"prev").onsuccess=e=>{const t=e.target.result;t?(s&&s.call(i,t.value),r.push(t.value),d<=0||r.length{const r=this.db.transaction(["dellog"],"readwrite");r.onsuccess=e=>{i(e.target.result)},r.onerror=e=>{this.#u("PCache","addDelLog",e.target.error),n(e.target.error)},s.forEach(s=>r.objectStore("dellog").add({topic:e,clear:t,low:s.low,hi:s.hi||s.low+1})),r.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readDelLog(e,t){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"));const s=this.db.transaction(["dellog"]);let i=[];return Array.isArray(t.ranges)?new Promise((n,r)=>{s.onerror=e=>{this.#u("PCache","readDelLog",e.target.error),r(e.target.error)};let a=0;t.ranges.forEach(r=>{const o=r.hi||r.low+1,h=IDBKeyRange.bound([e,0,r.low],[e,o,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore("dellog").getAll(h).onsuccess=e=>{const s=e.target.result;s&&(Array.isArray(s)?i=i.concat(s.map(e=>({low:e.low,hi:e.hi}))):i.push({low:s.low,hi:s.hi})),a++,a==t.ranges.length&&n(i)}})}):new Promise((i,n)=>{const r=t.since>0?t.since:0,a=t.before>0?t.before:Number.MAX_SAFE_INTEGER,o=0|t.limit;s.onerror=e=>{this.#u("PCache","readDelLog",e.target.error),n(e.target.error)};let h=0;const c=[],d=IDBKeyRange.bound([e,0,r],[e,a,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore("dellog").openCursor(d,"prev").onsuccess=e=>{const t=e.target.result;t?(c.push({low:t.value.low,hi:t.value.hi}),h+=t.value.hi-t.value.low,o<=0||h{const i=this.db.transaction(["dellog"]);i.onerror=e=>{this.#u("PCache","maxDelId",e.target.error),s(e.target.error)},i.objectStore("dellog").index("topic_clear").openCursor(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER]),"prev").onsuccess=e=>{e.target.result&&t(e.target.result.value)}}):this.disabled?Promise.resolve(0):Promise.reject(new Error("not initialized"))}static#b=["created","updated","deleted","touched","read","recv","seq","clear","defacs","creds","public","trusted","private","_aux","_deleted"];static#m(e,t){I.#b.forEach(s=>{t.hasOwnProperty(s)&&(e[s]=t[s])}),Array.isArray(t.tags)&&(e._tags=t.tags),t.acs&&e.setAccessMode(t.acs),e.seq|=0,e.read|=0,e.unread=Math.max(0,e.seq-e.read)}static#g(e,t){const s=e||{name:t.name};return I.#b.forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),Array.isArray(t._tags)&&(s.tags=t._tags),t.acs&&(s.acs=t.getAccessMode().jsonHelper()),s}static#f(e,t,s,i){const n=e||{topic:t,uid:s};return["updated","mode","read","recv","clear","lastSeen","userAgent"].forEach(e=>{i.hasOwnProperty(e)&&(n[e]=i[e])}),n}static#_(e,t){const s=e||{};return["topic","seq","ts","_status","from","head","content"].forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),s}static setDatabaseProvider(e){k=e}}var C=s(767),q=s.n(C);let O,U,j,L;class V{constructor(e,t){this._tinode=e,this._version=t,this._apiKey=e._apiKey,this._authToken=e.getAuthToken(),this.xhr=[]}uploadWithBaseUrl(e,t,s,i,n,r){let a=`/v${this._version}/file/u/`;if(e){let t=e;if(t.endsWith("/")&&(t=t.slice(0,-1)),!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Invalid base URL '${e}'`);a=t+a}const o=this,h=new O;this.xhr.push(h),h.open("POST",a,!0),h.setRequestHeader("X-Tinode-APIKey",this._apiKey),this._authToken&&h.setRequestHeader("X-Tinode-Auth",`Token ${this._authToken.token}`);let c=null,d=null;const l=new Promise((e,t)=>{c=e,d=t});h.upload.onprogress=e=>{e.lengthComputable&&(i&&i(e.loaded/e.total),this.onProgress&&this.onProgress(e.loaded/e.total))},h.onload=function(){let e;try{e=JSON.parse(this.response,f)}catch(t){o._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.response),e={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(c&&c(e.ctrl.params.url),n&&n(e.ctrl)):this.status>=400?(d&&d(new m(e.ctrl.text,e.ctrl.code)),r&&r(e.ctrl)):o._tinode.logger("ERROR: Unexpected server response status",this.status,this.response)},h.onerror=function(e){d&&d(e||new Error("failed")),r&&r(null)},h.onabort=function(e){d&&d(new Error("upload cancelled by user")),r&&r(null)};try{const e=new FormData;e.append("file",t),e.set("id",this._tinode.getNextUniqueId()),s&&e.set("topic",s),h.send(e)}catch(e){d&&d(e),r&&r(null)}return l}upload(e,t,s,i,n){const r=(this._tinode._secure?"https://":"http://")+this._tinode._host;return this.uploadWithBaseUrl(r,e,t,s,i,n)}download(e,t,s,i,n){if(!_(e))return void(n&&n(`The URL '${e}' must be relative, not absolute`));if(!this._authToken)return void(n&&n("Must authenticate first"));const r=this,a=new O;this.xhr.push(a),e=function(e){const t=new URL(e,window.location.origin);return t.searchParams.append("asatt","1"),t.toString().substring(window.location.origin.length)}(e),a.open("GET",e,!0),a.setRequestHeader("X-Tinode-APIKey",this._apiKey),a.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token),a.responseType="blob",a.onprogress=function(e){i&&i(e.loaded)};let o=null,h=null;const c=new Promise((e,t)=>{o=e,h=t});a.onload=function(){if(200==this.status){const e=document.createElement("a");e.href=window.URL.createObjectURL(new Blob([this.response],{type:s})),e.style.display="none",e.setAttribute("download",t),document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(e.href),o&&o()}else if(this.status>=400&&h){const e=new FileReader;e.onload=function(){try{const e=JSON.parse(this.result,f);h(new m(e.ctrl.text,e.ctrl.code))}catch(e){r._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.result),h(e)}},e.readAsText(this.response)}},a.onerror=function(e){h&&h(new Error("failed")),n&&n(e)},a.onabort=function(){h&&h(null)};try{a.send()}catch(e){h&&h(e),n&&n(e)}return c}cancel(){this.xhr.forEach(e=>{e.readyState<4&&e.abort()})}static setNetworkProvider(e){O=e}}class G{constructor(e){this.topic=e,this.what={}}#w(){return this.topic._deleted?void 0:this.topic.updated}#v(){return this.topic.isP2PType()?this.#w():this.topic._deleted?void 0:this.topic._lastSubsUpdate}withData(e,t,s){return this.what.data={since:e,before:t,limit:s},this}withLaterData(e){return this.withData(this.topic._maxSeq>0?this.topic._maxSeq+1:void 0,void 0,e)}withDataRanges(e,t){return this.what.data={ranges:M(e,this.topic._maxSeq),limit:t},this}withDataList(e){return this.withDataRanges(x(e))}withEarlierData(e){return this.withData(void 0,this.topic._minSeq>0?this.topic._minSeq:void 0,e)}withDesc(e){return this.what.desc={ims:e},this}withLaterDesc(){return this.withDesc(this.#w())}withSub(e,t,s){const i={ims:e,limit:t};return"me"==this.topic.getType()?i.topic=s:i.user=s,this.what.sub=i,this}withOneSub(e,t){return this.withSub(e,void 0,t)}withLaterOneSub(e){return this.withOneSub(this.topic._lastSubsUpdate,e)}withLaterSub(e){return this.withSub(this.#v(),e)}withTags(){return this.what.tags=!0,this}withCred(){return"me"==this.topic.getType()?this.what.cred=!0:this.topic._tinode.logger("ERROR: Invalid topic type for MetaGetBuilder:withCreds",this.topic.getType()),this}withAux(){return this.what.aux=!0,this}withDel(e,t){return(e||t)&&(this.what.del={since:e,limit:t}),this}withLaterDel(e){return this.withDel(this.topic._maxSeq>0?this.topic._maxDel+1:void 0,e)}extract(e){return this.what[e]}build(){const e=[];let t={};return["data","sub","desc","tags","cred","aux","del"].forEach(s=>{this.what.hasOwnProperty(s)&&(e.push(s),Object.getOwnPropertyNames(this.what[s]).length>0&&(t[s]=this.what[s]))}),e.length>0?t.what=e.join(" "):t=void 0,t}}class W{#y=void 0;#M=!1;buffer=[];constructor(e,t){this.#y=e||((e,t)=>e===t?0:e0)){o=!0;break}n=r-1}return o?{idx:r,exact:!0}:s?{idx:-1}:{idx:a<0?r+1:r}}#T(e,t){const s=this.#x(e,t,!1),i=s.exact&&this.#M?1:0;return t.splice(s.idx,i,e),t}getAt(e){return this.buffer[e]}getLast(e){return e?this.buffer.findLast(e):this.buffer[this.buffer.length-1]}put(){let e;e=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:arguments;for(let t in e)this.#T(e[t],this.buffer)}delAt(e){e|=0;let t=this.buffer.splice(e,1);if(t&&t.length>0)return t[0]}delRange(e,t){return this.buffer.splice(e,t-e)}length(){return this.buffer.length}reset(){this.buffer=[]}forEach(e,t,s,i){t=Math.max(0,0|t),s=Math.min(s||this.buffer.length,this.buffer.length);for(let n=t;nt?this.buffer[n-1]:void 0,ne.seq-t.seq,!0),this._attached=!1,this._lastSubsUpdate=new Date(0),this._new=!0,this._deleted=!1,this._delayedLeaveTimer=null,t&&(this.onData=t.onData,this.onMeta=t.onMeta,this.onPres=t.onPres,this.onInfo=t.onInfo,this.onMetaDesc=t.onMetaDesc,this.onMetaSub=t.onMetaSub,this.onSubsUpdated=t.onSubsUpdated,this.onTagsUpdated=t.onTagsUpdated,this.onCredsUpdated=t.onCredsUpdated,this.onAuxUpdated=t.onAuxUpdated,this.onDeleteTopic=t.onDeleteTopic,this.onAllMessagesReceived=t.onAllMessagesReceived)}static topicType(e){return{me:c,fnd:d,grp:l,new:l,nch:l,chn:l,usr:"p2p",sys:"sys",slf:"slf"}["string"==typeof e?e.substring(0,3):"xxx"]}static isMeTopicName(e){return z.topicType(e)==c}static isSelfTopicName(e){return"slf"==z.topicType(e)}static isGroupTopicName(e){return z.topicType(e)==l}static isP2PTopicName(e){return"p2p"==z.topicType(e)}static isCommTopicName(e){return z.isP2PTopicName(e)||z.isGroupTopicName(e)||z.isSelfTopicName(e)}static isNewGroupTopicName(e){return"string"==typeof e&&(e.substring(0,3)==o||e.substring(0,3)==h)}static isChannelTopicName(e){return"string"==typeof e&&("chn"==e.substring(0,3)||e.substring(0,3)==h)}static#S(e){return e.head&&e.head.replace}isSubscribed(){return this._attached}subscribe(e,t){return clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=null,this._attached?Promise.resolve(this):this._tinode.subscribe(this.name||o,e,t).then(e=>{if(e.code>=300)return e;if(this._attached=!0,this._deleted=!1,this.acs=e.params&&e.params.acs?e.params.acs:this.acs,this._new){if(delete this._new,this.name!=e.topic&&(this._cacheDelSelf(),this.name=e.topic),this._cachePutSelf(),this.created=e.ts,this.updated=e.ts,this.name!=c&&this.name!=d){const e=this._tinode.getMeTopic();e.onMetaSub&&e.onMetaSub(this),e.onSubsUpdated&&e.onSubsUpdated([this.name],1)}t&&t.desc&&(t.desc._noForwarding=!0,this._processMetaDesc(t.desc))}return e})}createMessage(e,t){return this._tinode.createMessage(this.name,e,t)}publish(e,t){return this.publishMessage(this.createMessage(e,t))}publishMessage(e){if(!this._attached)return Promise.reject(new Error("Cannot publish on inactive topic"));if(this._sending)return Promise.reject(new Error("The message is already being sent"));e._sending=!0,e._failed=!1;let t=null;return q().hasEntities(e.content)&&(t=[],q().entities(e.content,e=>{e&&(e.ref&&t.push(e.ref),e.preref&&t.push(e.preref))}),0==t.length&&(t=null)),this._tinode.publishMessage(e,t).then(t=>(e._sending=!1,e.ts=t.ts,this.swapMessageId(e,t.params.seq),this._maybeUpdateMessageVersionsCache(e),this._routeData(e),t)).catch(t=>{this._tinode.logger("WARNING: Message rejected by the server",t),e._sending=!1,e._failed=!0,this.onData&&this.onData()})}publishDraft(e,t){const s=e.seq||this._getQueuedSeqId();return e._noForwarding||(e._noForwarding=!0,e.seq=s,e.ts=new Date,e.from=this._tinode.getCurrentUserID(),e.noecho=!0,this._messages.put(e),this._tinode._db.addMessage(e),this.onData&&this.onData(e)),(t||Promise.resolve()).then(t=>e._cancelled?{code:300,text:"cancelled"}:this.publishMessage(e)).catch(t=>{throw this._tinode.logger("WARNING: Message draft rejected",t),e._sending=!1,e._failed=!0,e._fatal=t instanceof m&&t.code>=400&&t.code<500,this.onData&&this.onData(),t})}leave(e){return this._attached||e?this._tinode.leave(this.name,e).then(t=>(this._resetSub(),e&&this._gone(),t)):Promise.reject(new Error("Cannot leave inactive topic"))}leaveDelayed(e,t){clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=setTimeout(t=>{this._delayedLeaveTimer=null,this.leave(e)},t)}getMeta(e){return this._tinode.getMeta(this.name,e)}getMessagesPage(e,t,s,i,n){let r=t?this.startMetaQuery().withDataRanges(t,e):n?this.startMetaQuery().withData(s,void 0,e):this.startMetaQuery().withData(void 0,i,e);return this._loadMessages(this._tinode._db,r.extract("data")).then(a=>0==(t=this.msgHasMoreMessages(s,i,n)).length?Promise.resolve({topic:this.name,code:200,params:{count:a}}):(e-=a,r=this.startMetaQuery().withDataRanges(t,e),this.getMeta(r.build())))}getPinnedMessages(){const e=this.aux("pins");if(!Array.isArray(e))return Promise.resolve(0);const t=[];let s=e;return this._tinode._db.readMessages(this.name,{ranges:x(s)}).then(i=>(i.forEach(e=>{e&&(t.push(e.seq),this._messages.put(e),this._maybeUpdateMessageVersionsCache(e))}),t.length!t.includes(e)),this._tinode._db.readMessages(this.name,{ranges:x(s)})):null)).then(i=>(i&&s.forEach(e=>{i.find(t=>t.low<=e&&t.hi>e)&&t.push(e)}),t.length==e.length?Promise.resolve({topic:this.name,code:200,params:{count:t.length}}):(s=e.filter(e=>!t.includes(e)),this.getMeta(this.startMetaQuery().withDataList(s).build()))))}setMeta(e){return e.tags&&(e.tags=function(e){let t=[];if(Array.isArray(e)){for(let s=0,i=e.length;s1&&t.push(i))}t=t.sort().filter((e,t,s)=>!t||e!=s[t-1])}return 0==t.length&&t.push(p),t}(e.tags)),this._tinode.setMeta(this.name,e).then(t=>(t&&t.code>=300||(e.sub&&(e.sub.topic=this.name,t.params&&t.params.acs&&(e.sub.acs=t.params.acs,e.sub.updated=t.ts),e.sub.user||(e.sub.user=this._tinode.getCurrentUserID(),e.desc||(e.desc={})),e.sub._noForwarding=!0,this._processMetaSubs([e.sub])),e.desc&&(t.params&&t.params.acs&&(e.desc.acs=t.params.acs,e.desc.updated=t.ts),this._processMetaDesc(e.desc)),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds([e.cred],!0),e.aux&&this._processMetaAux(e.aux)),t))}updateMode(e,t){const s=e?this.subscriber(e):null,i=s?s.acs.updateGiven(t).getGiven():this.getAccessMode().updateWant(t).getWant();return this.setMeta({sub:{user:e,mode:i}})}invite(e,t){return this.setMeta({sub:{user:e,mode:t}})}archive(e){return this.private&&!this.private.arch==!e?Promise.resolve(e):this.setMeta({desc:{private:{arch:!!e||p}}})}pinMessage(e,t){let s=this.aux("pins");Array.isArray(s)||(s=[]);let i=!1;return t?s.includes(e)||(i=!0,5==s.length&&s.shift(),s.push(e)):s.includes(e)&&(i=!0,s=s.filter(t=>t!=e),0==s.length&&(s=p)),i?this.setMeta({aux:{pins:s}}):Promise.resolve()}pinTopic(e,t){return Promise.reject(new Error("Pinning topics is not supported here"))}pinnedTopicRank(e){return 0}delMessages(e,t){if(!this._attached)return Promise.reject(new Error("Cannot delete messages in inactive topic"));const s=M(e,this._maxSeq);let i;return i=s.length>0?this._tinode.delMessages(this.name,s,t):Promise.resolve({params:{del:0}}),i.then(t=>(t.params.del>this._maxDel&&(this._maxDel=Math.max(t.params.del,this._maxDel),this.clear=Math.max(t.params.del,this.clear)),e.forEach(e=>{e.hi?this.flushMessageRange(e.low,e.hi):this.flushMessage(e.low),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,t.params.del,e),this.onData&&this.onData(),t))}delMessagesAll(e){return!this._maxSeq||this._maxSeq<=0?Promise.resolve():this.delMessages([{low:1,hi:this._maxSeq+1,_all:!0}],e)}delMessagesList(e,t){return this.delMessages(x(e),t)}delMessagesEdits(e,t){const s=[e];return this.messageVersions(e,e=>s.push(e.seq)),this.delMessagesList(s,t)}delTopic(e){return this._deleted?(this._gone(),Promise.resolve(null)):this._tinode.delTopic(this.name,e).then(e=>(this._deleted=!0,this._resetSub(),this._gone(),e))}delSubscription(e){return this._attached?this._tinode.delSubscription(this.name,e).then(t=>(delete this._users[e],this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users)),t)):Promise.reject(new Error("Cannot delete subscription in inactive topic"))}note(e,t){if(!this._attached)return;const s=this._users[this._tinode.getCurrentUserID()];let i=!1;s?(!s[e]||s[e]0&&this.note("read",e)}noteKeyPress(){this._attached?this._tinode.noteKeyPress(this.name):this._tinode.logger("INFO: Cannot send notification in inactive topic")}noteRecording(e){this._attached?this._tinode.noteKeyPress(this.name,e?"kpa":"kpv"):this._tinode.logger("INFO: Cannot send notification in inactive topic")}videoCall(e,t,s){if(this._attached||["ringing","hang-up"].includes(e))return this._tinode.videoCall(this.name,t,e,s)}_updateMyReadRecv(e,t,s){let i,n=!1;switch(t|=0,this.seq=0|this.seq,this.read=0|this.read,this.recv=0|this.recv,e){case"recv":i=this.recv,this.recv=Math.max(this.recv,t),n=i!=this.recv;break;case"read":i=this.read,this.read=Math.max(this.read,t),n=i!=this.read;break;case"msg":i=this.seq,this.seq=Math.max(this.seq,t),(!this.touched||this.touchede.startsWith(g));if(e)return e.substring(6)}subscriber(e){return this._users[e]}messageVersions(e,t,s){if(!t)return;const i=this._messageVersions[e];i&&i.forEach(t,void 0,void 0,s)}messages(e,t,s,i){const n=e||this.onData;if(n){const e="number"==typeof t?this._messages.find({seq:t},!0):void 0,r="number"==typeof s?this._messages.find({seq:s},!0):void 0;if(-1!=e&&-1!=r){let t=[];this._messages.forEach((e,s,i,n)=>{if(z.#S(e))return;if(e._deleted)return;const r=this.latestMsgVersion(e.seq)||e;r._origTs||(r._origTs=r.ts,r._origSeq=r.seq,r.ts=e.ts,r.seq=e.seq),t.push({data:r,idx:n})},e,r,{}),t.forEach((e,s)=>{n.call(i,e.data,s>0?t[s-1].data:void 0,s=0)return this._messages.getAt(t)}latestMessage(){return this._messages.getLast(e=>!e._deleted)}latestMsgVersion(e){const t=this._messageVersions[e];return t?t.getLast():null}maxMsgSeq(){return this._maxSeq}minMsgSeq(){return this._minSeq}maxClearId(){return this._maxDel}messageCount(){return this._messages.length()}queuedMessages(e,t){if(!e)throw new Error("Callback must be provided");this.messages(e,u,void 0,t)}msgReceiptCount(e,t){let s=0;if(t>0){const i=this._tinode.getCurrentUserID();for(let n in this._users){const r=this._users[n];r.user!==i&&r[e]>=t&&s++}}return s}msgReadCount(e){return this.msgReceiptCount("read",e)}msgRecvCount(e){return this.msgReceiptCount("recv",e)}msgHasMoreMessages(e,t,s){const i=[];if(e>=t)return i;let n,r=0;return this._messages.forEach((a,o)=>{const h=o||{seq:0},c=h._deleted?h.hi:h.seq+1;n=a.seq>c?{low:c,hi:a.seq}:null,n&&(s?n.hi>=e:n.low=e:n.low=0)return this._tinode._db.remMessages(this.name,e),this._messages.delAt(t)}flushMessageRange(e,t){this._tinode._db.remMessages(this.name,e,t);for(let s=e;s=0?this._messages.delRange(s,this._messages.find({seq:t},!0)):[]}swapMessageId(e,t){const s=this._messages.find(e),i=this._messages.length();0<=s&&s=0){const s=this._messages.getAt(t),i=this.msgStatus(s);if(10==i||30==i||40==i)return this._tinode._db.remMessages(this.name,e),s._cancelled=!0,this._messages.delAt(t),this.onData&&this.onData(),!0}return!1}getType(){return z.topicType(this.name)}getAccessMode(){return this.acs}setAccessMode(e){return this.acs=new n(e)}getDefaultAccess(){return this.defacs}startMetaQuery(){return new G(this)}isArchived(){return this.private&&!!this.private.arch}isMeType(){return z.isMeTopicName(this.name)}isSelfType(){return z.isSelfTopicName(this.name)}isChannelType(){return z.isChannelTopicName(this.name)}isGroupType(){return z.isGroupTopicName(this.name)}isP2PType(){return z.isP2PTopicName(this.name)}isCommType(){return z.isCommTopicName(this.name)}msgStatus(e,t){let s=0;return this._tinode.isMe(e.from)?e._sending?s=20:e._fatal||e._cancelled?s=40:e._failed?s=30:e.seq>=u?s=10:this.msgReadCount(e.seq)>0?s=70:this.msgRecvCount(e.seq)>0?s=60:e.seq>0&&(s=50):s=80,t&&e._status!=s&&(e._status=s,this._tinode._db.updMessageStatus(this.name,e.seq,s)),s}_maybeUpdateMessageVersionsCache(e){if(!z.#S(e))return void(this._messageVersions[e.seq]&&(this._messageVersions[e.seq].filter(t=>t.from==e.from),this._messageVersions[e.seq].isEmpty()&&delete this._messageVersions[e.seq]));const t=parseInt(e.head.replace.split(":")[1]);if(t>e.seq)return;const s=this.findMessage(t);if(s&&s.from!=e.from)return;const i=this._messageVersions[t]||new W((e,t)=>e.seq-t.seq,!0);i.put(e),this._messageVersions[t]=i}_routeData(e){e.content&&(!this.touched||this.touchedthis._maxSeq&&(this._maxSeq=e.seq,this.msgStatus(e,!0),clearTimeout(this._recvNotificationTimer),this._recvNotificationTimer=setTimeout(e=>{this._recvNotificationTimer=null,this.noteRecv(this._maxSeq)},100)),(e.seq0&&this._processMetaSubs(e.sub),e.del&&this._processDelMessages(e.del.clear,e.del.delseq),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds(e.cred),e.aux&&this._processMetaAux(e.aux),this.onMeta&&this.onMeta(e)}_routePres(e){let t,s;switch(e.what){case"del":this._processDelMessages(e.clear,e.delseq);break;case"on":case"off":t=this._users[e.src],t?t.online="on"==e.what:this._tinode.logger("WARNING: Presence update for an unknown user",this.name,e.src);break;case"term":this._resetSub();break;case"upd":e.src&&!this._tinode.isTopicCached(e.src)&&this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());break;case"aux":this.getMeta(this.startMetaQuery().withAux().build());break;case"acs":if(s=e.src||this._tinode.getCurrentUserID(),t=this._users[s],t)t.acs.updateAll(e.dacs),this._processMetaSubs([{user:s,updated:new Date,acs:t.acs}]);else{const i=(new n).updateAll(e.dacs);i&&i.mode!=n._NONE&&(t=this._cacheGetUser(s),t?t.acs=i:(t={user:s,acs:i},this.getMeta(this.startMetaQuery().withOneSub(void 0,s).build())),t.updated=new Date,this._processMetaSubs([t]))}break;default:this._tinode.logger("INFO: Ignored presence update",e.what)}this.onPres&&this.onPres(e)}_routeInfo(e){switch(e.what){case"recv":case"read":const t=this._users[e.from];t&&(t[e.what]=e.seq,t.recv{e.hi?(s+=e.hi-e.low,this.flushMessageRange(e.low,e.hi)):(s++,this.flushMessage(e.low)),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,e,t)),s>0&&this.onData&&this.onData()}_allMessagesReceived(e){this.onAllMessagesReceived&&this.onAllMessagesReceived(e)}_resetSub(){this._attached=!1}_gone(){this._messages.reset(),this._tinode._db.remMessages(this.name),this._users={},this.acs=new n(null),this.private=null,this.public=null,this.trusted=null,this._maxSeq=0,this._minSeq=0,this._attached=!1;const e=this._tinode.getMeTopic();e&&e._routePres({_noForwarding:!0,what:"gone",topic:c,src:this.name}),this.onDeleteTopic&&this.onDeleteTopic()}_updateCachedUser(e,t){let s=this._cacheGetUser(e);return s=w(s||{},t),this._cachePutUser(e,s),v(this._users,e,s)}_getQueuedSeqId(){return this._queuedSeqId++}_loadMessages(e,t){(t=t||{}).limit=t.limit||24;let s=0;return e.readMessages(this.name,t).then(e=>{e.forEach(e=>{e.seq>this._maxSeq&&(this._maxSeq=e.seq),(e.seqe.readDelLog(this.name,t)).then(e=>e.forEach(e=>{this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})})).then(e=>s)}_updateReceived(e,t){this.touched=new Date,this.seq=0|e,t&&!this._tinode.isMe(t)||(this.read=this.read?Math.max(this.read,this.seq):this.seq,this.recv=this.recv?Math.max(this.read,this.recv):this.read),this.unread=this.seq-(0|this.read),this._tinode._db.updTopic(this)}}class F extends z{_contacts={};constructor(e){super(d,e)}_processMetaSubs(e){let t=Object.getOwnPropertyNames(this._contacts).length;this._contacts={};for(let s in e){let i=e[s];const n=i.topic?i.topic:i.user;i=v(this._contacts,n,i),t++,this.onMetaSub&&this.onMetaSub(i)}t>0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))}publish(){return Promise.reject(new Error("Publishing to 'fnd' is not supported"))}setMeta(e){return Object.getPrototypeOf(F.prototype).setMeta.call(this,e).then(e=>{Object.keys(this._contacts).length>0&&(this._contacts={},this.onSubsUpdated&&this.onSubsUpdated([]))})}checkTagUniqueness(e,t){return new Promise((s,i)=>{this.subscribe().then(t=>this.setMeta({desc:{public:e}})).then(e=>this.getMeta(this.startMetaQuery().withTags().build())).then(e=>{e&&Array.isArray(e.tags)&&0!=e.tags.length||s(!0);const i=e.tags.filter(e=>e!==t);s(0==i.length)}).catch(e=>{i(e)})})}contacts(e,t){const s=e||this.onMetaSub;if(s)for(let e in this._contacts)s.call(t,this._contacts[e],e,this._contacts)}}class B extends z{onContactUpdate;constructor(e){super(c,e),e&&(this.onContactUpdate=e.onContactUpdate)}_processMetaDesc(e){const t=e.acs&&!e.acs.isPresencer()&&this.acs&&this.acs.isPresencer();w(this,e),this._tinode._db.updTopic(this),this._updateCachedUser(this._tinode._myUID,e),t&&this._tinode.mapTopics(e=>{e.online&&(e.online=!1,e.seen=Object.assign(e.seen||{},{when:new Date}),this._refreshContact("off",e))}),this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(e){let t=0;if(e.forEach(e=>{const s=e.topic;if(s==d||s==c)return;e.online=!!e.online;let i=null;if(e.deleted)i=e,this._tinode.cacheRemTopic(s),this._tinode._db.remTopic(s);else{void 0!==e.seq&&(e.seq=0|e.seq,e.recv=0|e.recv,e.read=0|e.read,e.unread=e.seq-e.read);const t=this._tinode.getTopic(s);t._new&&delete t._new,i=w(t,e),this._tinode._db.updTopic(i),z.isP2PTopicName(s)&&(this._cachePutUser(s,i),this._tinode._db.updUser(s,i.public)),!e._noForwarding&&t&&(e._noForwarding=!0,t._processMetaDesc(e))}t++,this.onMetaSub&&this.onMetaSub(i)}),this.onSubsUpdated&&t>0){const s=[];e.forEach(e=>{s.push(e.topic)}),this.onSubsUpdated(s,t)}}_processMetaCreds(e,t){1==e.length&&e[0]==p&&(e=[]),t?e.forEach(e=>{if(e.val){let t=this._credentials.findIndex(t=>t.meth==e.meth&&t.val==e.val);t<0?(e.done||(t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done),t>=0&&this._credentials.splice(t,1)),this._credentials.push(e)):this._credentials[t].done=e.done}else if(e.resp){const t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done);t>=0&&(this._credentials[t].done=!0)}}):this._credentials=e,this.onCredsUpdated&&this.onCredsUpdated(this._credentials)}_routePres(e){if("term"==e.what)return void this._resetSub();if("upd"==e.what&&e.src==c)return void this.getMeta(this.startMetaQuery().withDesc().build());const t=this._tinode.cacheGetTopic(e.src);if(t){switch(e.what){case"on":t.online=!0;break;case"off":t.online&&(t.online=!1,t.seen=Object.assign(t.seen||{},{when:new Date}));break;case"msg":t._updateReceived(e.seq,e.act);break;case"upd":this.getMeta(this.startMetaQuery().withLaterOneSub(e.src).build());break;case"acs":e.tgt||(t.acs?t.acs.updateAll(e.dacs):t.acs=(new n).updateAll(e.dacs),t.touched=new Date);break;case"ua":t.seen={when:new Date,ua:e.ua};break;case"recv":e.seq=0|e.seq,t.recv=t.recv?Math.max(t.recv,e.seq):e.seq;break;case"read":e.seq=0|e.seq,t.read=t.read?Math.max(t.read,e.seq):e.seq,t.recv=t.recv?Math.max(t.read,t.recv):t.recv,t.unread=t.seq-t.read;break;case"gone":this._tinode.cacheRemTopic(e.src),t._deleted?this._tinode._db.remTopic(e.src):(t._deleted=!0,t._attached=!1,this._tinode._db.markTopicAsDeleted(e.src,!0));break;case"del":break;default:this._tinode.logger("INFO: Unsupported presence update in 'me'",e.what)}this._refreshContact(e.what,t)}else{if("acs"==e.what){const t=new n(e.dacs);if(!t||t.mode==n._INVALID)return void this._tinode.logger("ERROR: Invalid access mode update",e.src,e.dacs);if(t.mode==n._NONE)return void this._tinode.logger("WARNING: Removing non-existent subscription",e.src,e.dacs);{this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const s=this._tinode.getTopic(e.src);s.topic=e.src,s.online=!1,s.acs=t,this._tinode._db.updTopic(s)}}else if("tags"==e.what)this.getMeta(this.startMetaQuery().withTags().build());else if("msg"==e.what){this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const t=this._tinode.getTopic(e.src);t._deleted=!1,this._tinode._db.updTopic(t)}this._refreshContact(e.what,t)}this.onPres&&this.onPres(e)}_refreshContact(e,t){this.onContactUpdate&&this.onContactUpdate(e,t)}publish(){return Promise.reject(new Error("Publishing to 'me' is not supported"))}delCredential(e,t){return this._attached?this._tinode.delCredential(e,t).then(s=>{const i=this._credentials.findIndex(s=>s.meth==e&&s.val==t);return i>-1&&this._credentials.splice(i,1),this.onCredsUpdated&&this.onCredsUpdated(this._credentials),s}):Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"))}contacts(e,t,s){this._tinode.mapTopics((i,n)=>{!i.isCommType()||t&&!t(i)||e.call(s,i,n)})}getContact(e){return this._tinode.cacheGetTopic(e)}getAccessMode(e){if(e){const t=this._tinode.cacheGetTopic(e);return t?t.acs:null}return this.acs}isArchived(e){const t=this._tinode.cacheGetTopic(e);return t&&t.private&&!!t.private.arch}getCredentials(){return this._credentials}pinTopic(e,t){if(!this._attached)return Promise.reject(new Error("Cannot pin topic in inactive 'me' topic"));if(!z.isCommTopicName(e))return Promise.reject(new Error("Invalid topic to pin"));const s=Array.isArray(this.private&&this.private.tpin)?this.private.tpin:[],i=s.includes(e);return t&&i||!t&&!i?Promise.resolve(s):(t?s.unshift(e):s.splice(s.indexOf(e),1),this.setMeta({desc:{private:{tpin:s.length>0?s:p}}}))}pinnedTopicRank(e){if(!this.private||!this.private.tpin)return 0;const t=this.private.tpin.indexOf(e);return t<0?0:this.private.tpin.length-t}}function K(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return String.fromCharCode("0x"+t)}))}function H(e,t){return"string"==typeof t&&t.length>128?"<"+t.length+", bytes: "+t.substring(0,12)+"..."+t.substring(t.length-12)+">":function(e,t){if(t instanceof Date)t=function(e){if(!b(e))return;const t=function(e,t){return"0".repeat((t=t||2)-(""+e).length)+e},s=e.getUTCMilliseconds();return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+(s?"."+t(s,3):"")+"Z"}(t);else if(t instanceof n)t=t.jsonHelper();else if(null==t||!1===t||Array.isArray(t)&&0==t.length||"object"==typeof t&&0==Object.keys(t).length)return;return t}(0,t)}"undefined"!=typeof WebSocket&&(U=WebSocket),"undefined"!=typeof XMLHttpRequest&&(j=XMLHttpRequest),"undefined"!=typeof indexedDB&&(L=indexedDB),function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";"undefined"==typeof btoa&&(s.g.btoa=function(t=""){let s=t,i="";for(let t,n=0,r=0,a=e;s.charAt(0|r)||(a="=",r%1);i+=a.charAt(63&n>>8-r%1*8)){if(t=s.charCodeAt(r+=3/4),t>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");n=n<<8|t}return i}),"undefined"==typeof atob&&(s.g.atob=function(t=""){let s=t.replace(/=+$/,""),i="";if(s.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let t,n=0,r=0,a=0;t=s.charAt(a++);~t&&(r=n%4?64*r+t:t,n++%4)?i+=String.fromCharCode(255&r>>(-2*n&6)):0)t=e.indexOf(t);return i}),"undefined"==typeof window&&(s.g.window={WebSocket:U,XMLHttpRequest:j,indexedDB:L,URL:{createObjectURL:function(){throw new Error("Unable to use URL.createObjectURL in a non-browser application")}}}),R.setNetworkProviders(U,j),V.setNetworkProvider(j),I.setDatabaseProvider(L)}();class Q{_host;_secure;_appName;_apiKey;_browser="";_platform;_hwos="undefined";_humanLanguage="xx";_loggingEnabled=!1;_trimLongStrings=!1;_myUID=null;_authenticated=!1;_login=null;_authToken=null;_inPacketCount=0;_messageId=Math.floor(65535*Math.random()+65535);_serverInfo=null;_deviceToken=null;_pendingPromises={};_expirePromises=null;_connection=null;_persist=!1;_db=null;_cache={};constructor(e,t){if(this._host=e.host,this._secure=e.secure,this._appName=e.appName||"Undefined",this._apiKey=e.apiKey,this._platform=e.platform||"web","undefined"!=typeof navigator&&(this._browser=function(e,t){e=e||"";let s,i="";/reactnative/i.test(t)&&(i="ReactNative; ");let n=(e=e.replace(" (KHTML, like Gecko)","")).match(/(AppleWebKit\/[.\d]+)/i);if(n){const t=["edg","chrome","safari","mobile","version"];let i,r=e.substr(n.index+n[0].length).split(" "),a=[];for(let e=0;es[1].toLowerCase().startsWith(e))]),"Version"==s[1]&&(i=s[2]))}a.sort((e,t)=>e[2]-t[2]),a.length>0?(a[0][0].toLowerCase().startsWith("edg")?a[0][0]="Edge":"OPR"==a[0][0]?a[0][0]="Opera":"Safari"==a[0][0]&&i&&(a[0][1]=i),s=a[0][0]+"/"+a[0][1]):s=n[1]}else/firefox/i.test(e)?(n=/Firefox\/([.\d]+)/g.exec(e),s=n?"Firefox/"+n[1]:"Firefox/?"):(n=/([\w.]+)\/([.\d]+)/.exec(e),n?s=n[1]+"/"+n[2]:(n=e.split(" "),s=n[0]));if(n=s.split("/"),n.length>1){const e=n[1].split("."),t=e[1]?"."+e[1].substr(0,2):"";s=`${n[0]}/${e[0]}${t}`}return i+s}(navigator.userAgent,navigator.product),this._hwos=navigator.platform,this._humanLanguage=navigator.language||"en-US"),R.logger=this.logger,q().logger=this.logger,"lp"!=e.transport&&"ws"!=e.transport&&(e.transport=function(){if("object"==typeof window){if(window.WebSocket)return"ws";if(window.XMLHttpRequest)return"lp"}return null}()),this._connection=new R(e,"0",!0),this._connection.onMessage=e=>{this.#P(e)},this._connection.onOpen=e=>this.#A(),this._connection.onDisconnect=(e,t)=>this.#E(e,t),this._connection.onAutoreconnectIteration=(e,t)=>{this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e,t)},this._persist=e.persist,this._db=new I(this.logger,this.logger),this._persist){const e=[];this._db.initDatabase().then(t=>this._db.mapTopics(t=>{let s=this.#D("topic",t.name);s||(s=t.name==c?new B:t.name==d?new F:new z(t.name),this._db.deserializeTopic(s,t),this.#R(s),s._cachePutSelf(),this._db.maxDelId(s.name).then(e=>{s._maxDel=Math.max(s._maxDel,e||0)}),delete s._new,e.push(s._loadMessages(this._db)))})).then(e=>this._db.mapUsers(e=>{this.#N("user",e.uid,w({},e.public))})).then(t=>Promise.all(e)).then(e=>{t&&t(),this.logger("Persistent cache initialized.")}).catch(e=>{t&&t(e),this.logger("Failed to initialize persistent cache:",e)})}else this._db.deleteDatabase().then(e=>{t&&t()})}logger(e,...t){if(this._loggingEnabled){const s=new Date,i=("0"+s.getUTCHours()).slice(-2)+":"+("0"+s.getUTCMinutes()).slice(-2)+":"+("0"+s.getUTCSeconds()).slice(-2)+"."+("00"+s.getUTCMilliseconds()).slice(-3);console.log("["+i+"]",e,t.join(" "))}}#k(e){let t=null;return e&&(t=new Promise((t,s)=>{this._pendingPromises[e]={resolve:t,reject:s,ts:new Date}})),t}#I(e,t,s,i){const n=this._pendingPromises[e];n&&(delete this._pendingPromises[e],t>=200&&t<400?n.resolve&&n.resolve(s):n.reject&&n.reject(new m(i,t)))}#C(e,t){let s;t&&(s=this.#k(t)),e=y(e);let i=JSON.stringify(e);this.logger("out: "+(this._trimLongStrings?JSON.stringify(e,H):i));try{this._connection.sendText(i)}catch(e){if(!t)throw e;this.#I(t,R.NETWORK_ERROR,null,e.message)}return s}#P(e){if(!e)return;if(this._inPacketCount++,this.onRawMessage&&this.onRawMessage(e),"0"===e)return void(this.onNetworkProbe&&this.onNetworkProbe());let t=JSON.parse(e,f);t?(this.logger("in: "+(this._trimLongStrings?JSON.stringify(t,H):e)),this.onMessage&&this.onMessage(t),t.ctrl?(this.onCtrlMessage&&this.onCtrlMessage(t.ctrl),t.ctrl.id&&this.#I(t.ctrl.id,t.ctrl.code,t.ctrl,t.ctrl.text),setTimeout(e=>{if(205==t.ctrl.code&&"evicted"==t.ctrl.text){const e=this.#D("topic",t.ctrl.topic);e&&(e._resetSub(),t.ctrl.params&&t.ctrl.params.unsub&&e._gone())}else if(t.ctrl.code<300&&t.ctrl.params)if("data"==t.ctrl.params.what){const e=this.#D("topic",t.ctrl.topic);e&&e._allMessagesReceived(t.ctrl.params.count)}else if("sub"==t.ctrl.params.what){const e=this.#D("topic",t.ctrl.topic);e&&e._processMetaSubs([])}},0)):setTimeout(e=>{if(t.meta){const e=this.#D("topic",t.meta.topic);e&&e._routeMeta(t.meta),t.meta.id&&this.#I(t.meta.id,200,t.meta,"META"),this.onMetaMessage&&this.onMetaMessage(t.meta)}else if(t.data){const e=this.#D("topic",t.data.topic);e&&e._routeData(t.data),this.onDataMessage&&this.onDataMessage(t.data)}else if(t.pres){const e=this.#D("topic",t.pres.topic);e&&e._routePres(t.pres),this.onPresMessage&&this.onPresMessage(t.pres)}else if(t.info){const e=this.#D("topic",t.info.topic);e&&e._routeInfo(t.info),this.onInfoMessage&&this.onInfoMessage(t.info)}else this.logger("ERROR: Unknown packet received.")},0)):(this.logger("in: "+e),this.logger("ERROR: failed to parse data"))}#A(){this._expirePromises||(this._expirePromises=setInterval(e=>{const t=new m("timeout",504),s=new Date((new Date).getTime()-5e3);for(let e in this._pendingPromises){let i=this._pendingPromises[e];i&&i.ts{e._resetSub()});for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#O(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+a}#U(e,t){switch(e){case"hi":return{hi:{id:this.getNextUniqueId(),ver:r,ua:this.#O(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:t,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:t,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:t,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:t,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:t,desc:{},sub:{},tags:[],aux:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:t,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:t,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#N(e,t,s){this._cache[e+":"+t]=s}#D(e,t){return this._cache[e+":"+t]}#j(e,t){delete this._cache[e+":"+t]}#q(e,t,s){const i=e?e+":":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#R(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#D("user",e);if(t)return{user:e,public:w({},t)}},e._cachePutUser=(e,t)=>{this.#N("user",e,w({},t.public))},e._cacheDelUser=e=>{this.#j("user",e)},e._cachePutSelf=t=>{this.#N("topic",e.name,e)},e._cacheDelSelf=t=>{this.#j("topic",e.name)}}#L(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return"object"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return z.topicType(e)}static isMeTopicName(e){return z.isMeTopicName(e)}static isSelfTopicName(e){return z.isSelfTopicName(e)}static isGroupTopicName(e){return z.isGroupTopicName(e)}static isP2PTopicName(e){return z.isP2PTopicName(e)}static isCommTopicName(e){return z.isCommTopicName(e)}static isNewGroupTopicName(e){return z.isNewGroupTopicName(e)}static isChannelTopicName(e){return z.isChannelTopicName(e)}static getVersion(){return r}static setNetworkProviders(e,t){U=e,j=t,R.setNetworkProviders(U,j),V.setNetworkProvider(j)}static setDatabaseProvider(e){L=e,I.setDatabaseProvider(L)}static getLibrary(){return a}static isNullValue(e){return e===p}static isServerAssignedSeq(e){return e>0&&e3&&e.length<24&&/^[a-z0-9][a-z0-9_\-]{3,23}$/i.test(e)}static tagSplit(e){if(!e)return null;const t=(e=e.trim()).indexOf(":");if(t<=0)return null;const s=e.substring(t+1);return s?{prefix:e.substring(0,t),value:s}:null}static setUniqueTag(e,t){if(!e||0==e.length)return[t];const s=Q.tagSplit(t);return s?((e=e.filter(e=>e&&!e.startsWith(s.prefix))).push(t),e):e}static clearTagPrefix(e,t){return e&&0!=e.length?e.filter(e=>e&&!e.startsWith(t)):[]}static tagByPrefix(e,t){if(e)return e.find(e=>e&&e.startsWith(t))}getNextUniqueId(){return 0!=this._messageId?""+this._messageId++:void 0}connect(e){return this._connection.connect(e)}reconnect(e){this._connection.reconnect(e)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(e){if("string"!=typeof e)return e;if(_(e)){const t="scheme://host/",s=new URL(e,t);this._apiKey&&s.searchParams.append("apikey",this._apiKey),this._authToken&&this._authToken.token&&(s.searchParams.append("auth","token"),s.searchParams.append("secret",this._authToken.token)),e=s.toString().substring(t.length-1)}return e}account(e,t,s,i,n){const r=this.#U("acc");return r.acc.user=e,r.acc.scheme=t,r.acc.secret=s,r.acc.login=i,n&&(r.acc.desc.defacs=n.defacs,r.acc.desc.public=n.public,r.acc.desc.private=n.private,r.acc.desc.trusted=n.trusted,r.acc.tags=n.tags,r.acc.cred=n.cred,r.acc.tmpscheme=n.scheme,r.acc.tmpsecret=n.secret,Array.isArray(n.attachments)&&n.attachments.length>0&&(r.extra={attachments:n.attachments.filter(e=>_(e))})),this.#C(r,r.acc.id)}createAccount(e,t,s,i){let n=this.account("new",e,t,s,i);return s&&(n=n.then(e=>this.#L(e))),n}createAccountBasic(e,t,s){return e=e||"",t=t||"",this.createAccount("basic",K(e+":"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||"",s=s||"",this.account(e,"basic",K(t+":"+s),!1,i)}hello(){const e=this.#U("hi");return this.#C(e,e.hi.id).then(e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e)).catch(e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)})}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#C({hi:{dev:e||Q.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#U("login");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#C(i,i.login.id).then(e=>this.#L(e))}loginBasic(e,t,s){return this.login("basic",K(e+":"+t),s).then(t=>(this._login=e,t))}loginToken(e,t){return this.login("token",e,t)}requestResetAuthSecret(e,t,s){return this.login("reset",K(e+":"+t+":"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#U("sub",e);if(e||(e=o),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;Q.isNewGroupTopicName(e)?i.sub.set.desc=t:Q.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter(e=>_(e))}),s.tags&&(i.sub.set.tags=s.tags),s.aux&&(i.sub.set.aux=s.aux)}return this.#C(i,i.sub.id)}leave(e,t){const s=this.#U("leave",e);return s.leave.unsub=t,this.#C(s,s.leave.id)}createMessage(e,t,s){const i=this.#U("pub",e);let n="string"==typeof t?q().parse(t):t;return n&&!q().isPlainText(n)&&(i.pub.head={mime:q().getContentType()},t=n),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter(e=>_(e))}),this.#C(s,e.id)}oobNotification(e){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(e,H):e)),e.what){case"msg":if(!e.seq||e.seq<1||!e.topic)break;if(!this.isConnected())break;const t=this.#D("topic",e.topic);if(!t)break;if(t.isSubscribed())break;t.maxMsgSeq(){this.logger("Failed to get the name of a new sender",e)}),t.subscribe(null).then(e=>t.getMeta(new G(t).withLaterData(24).withLaterDel(24).build())).then(e=>{t.leaveDelayed(!1,1e3)}).catch(e=>{this.logger("On push data fetch failed",e)}).finally(e=>{this.getMeTopic()._refreshContact("msg",t)}));break;case"read":this.getMeTopic()._routePres({what:"read",seq:e.seq});break;case"sub":if(!this.isMe(e.xfrom))break;const s={given:e.modeGiven,want:e.modeWant},i=new n(s),r=i.mode&&i.mode!=n._NONE?{what:"acs",src:e.topic,dacs:s}:{what:"gone",src:e.topic};this.getMeTopic()._routePres(r);break;default:this.logger("Unknown push type ignored",e.what)}}getMeta(e,t){const s=this.#U("get",e);return s.get=w(s.get,t),this.#C(s,s.get.id)}setMeta(e,t){const s=this.#U("set",e),i=[];return t&&(["desc","sub","tags","cred","aux"].forEach(e=>{t.hasOwnProperty(e)&&(i.push(e),s.set[e]=t[e])}),Array.isArray(t.attachments)&&t.attachments.length>0&&(s.extra={attachments:t.attachments.filter(e=>_(e))})),0==i.length?Promise.reject(new Error("Invalid {set} parameters")):this.#C(s,s.set.id)}delMessages(e,t,s){const i=this.#U("del",e);return i.del.what="msg",i.del.delseq=t,i.del.hard=s,this.#C(i,i.del.id)}delTopic(e,t){const s=this.#U("del",e);return s.del.what="topic",s.del.hard=t,this.#C(s,s.del.id)}delSubscription(e,t){const s=this.#U("del",e);return s.del.what="sub",s.del.user=t,this.#C(s,s.del.id)}delCredential(e,t){const s=this.#U("del",c);return s.del.what="cred",s.del.cred={meth:e,val:t},this.#C(s,s.del.id)}delCurrentUser(e){const t=this.#U("del",null);return t.del.what="user",t.del.hard=e,this.#C(t,t.del.id).then(e=>{this._myUID=null})}note(e,t,s){if(s<=0||s>=u)throw new Error(`Invalid message id ${s}`);const i=this.#U("note",e);i.note.what=t,i.note.seq=s,this.#C(i)}noteKeyPress(e,t){const s=this.#U("note",e);s.note.what=t||"kp",this.#C(s)}videoCall(e,t,s,i){const n=this.#U("note",e);n.note.seq=t,n.note.what="call",n.note.event=s,n.note.payload=i,this.#C(n,n.note.id)}getTopic(e){let t=this.#D("topic",e);return!t&&e&&(t=e==c?new B:e==d?new F:new z(e),this.#R(t),t._cachePutSelf()),t}cacheGetTopic(e){return this.#D("topic",e)}cacheRemTopic(e){this.#j("topic",e)}mapTopics(e,t){this.#q("topic",e,t)}isTopicCached(e){return!!this.#D("topic",e)}newGroupTopicName(e){return(e?h:o)+this.getNextUniqueId()}getMeTopic(){return this.getTopic(c)}getFndTopic(){return this.getTopic(d)}getLargeFileHelper(){return new V(this,"0")}getCurrentUserID(){return this._myUID}isMe(e){return this._myUID===e}getCurrentLogin(){return this._login}getServerInfo(){return this._serverInfo}report(e,t){return this.publish("sys",q().attachJSON(null,{action:e,target:t}))}getServerParam(e,t){return this._serverInfo&&this._serverInfo[e]||t}enableLogging(e,t){this._loggingEnabled=e,this._trimLongStrings=e&&t}setHumanLanguage(e){e&&(this._humanLanguage=e)}isTopicOnline(e){const t=this.#D("topic",e);return t&&t.online}getTopicAccessMode(e){const t=this.#D("topic",e);return t?t.acs:null}wantAkn(e){this._messageId=e?Math.floor(16777215*Math.random()+16777215):0}onWebsocketOpen=void 0;onConnect=void 0;onDisconnect=void 0;onLogin=void 0;onCtrlMessage=void 0;onDataMessage=void 0;onPresMessage=void 0;onMessage=void 0;onRawMessage=void 0;onNetworkProbe=void 0;onAutoreconnectIteration=void 0}return Q.MESSAGE_STATUS_NONE=0,Q.MESSAGE_STATUS_QUEUED=10,Q.MESSAGE_STATUS_SENDING=20,Q.MESSAGE_STATUS_FAILED=30,Q.MESSAGE_STATUS_FATAL=40,Q.MESSAGE_STATUS_SENT=50,Q.MESSAGE_STATUS_RECEIVED=60,Q.MESSAGE_STATUS_READ=70,Q.MESSAGE_STATUS_TO_ME=80,Q.DEL_CHAR=p,Q.MAX_MESSAGE_SIZE="maxMessageSize",Q.MAX_SUBSCRIBER_COUNT="maxSubscriberCount",Q.MIN_TAG_LENGTH="minTagLength",Q.MAX_TAG_LENGTH="maxTagLength",Q.MAX_TAG_COUNT="maxTagCount",Q.MAX_FILE_UPLOAD_SIZE="maxFileUploadSize",Q.REQ_CRED_VALIDATORS="reqCred",Q.MSG_DELETE_AGE="msgDelAge",Q.URI_TOPIC_ID_PREFIX="tinode:topic/",Q.TAG_ALIAS=g,Q.TAG_EMAIL="email:",Q.TAG_PHONE="tel:",i}()}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.tinode=t():e.tinode=t()}(this,function(){return function(){"use strict";var e={767:function(e){const t="text/x-drafty",s="text/x-drafty-fr",i=["act","height","duration","fn","incoming","mime","name","premime","preref","preview","ref","size","state","url","val","width"],r=new Intl.Segmenter,n=[{name:"ST",start:/(?:^|[\W_])(\*)[^\s*]/,end:/[^\s*](\*)(?=$|[\W_])/},{name:"EM",start:/(?:^|\W)(_)[^\s_]/,end:/[^\s_](_)(?=$|\W)/},{name:"DL",start:/(?:^|[\W_])(~)[^\s~]/,end:/[^\s~](~)(?=$|[\W_])/},{name:"CO",start:/(?:^|\W)(`)[^`]/,end:/[^`](`)(?=$|\W)/}],a=["QQ"],o=[{name:"LN",dataName:"url",pack:function(e){return/^[a-z]+:\/\//i.test(e)||(e="http://"+e),{url:e}},re:/(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/gi},{name:"MN",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B@([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu},{name:"HT",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B#([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu}],c={AU:{html_tag:"audio",md_tag:void 0,isVoid:!1},BN:{html_tag:"button",md_tag:void 0,isVoid:!1},BR:{html_tag:"br",md_tag:"\n",isVoid:!0},CO:{html_tag:"tt",md_tag:"`",isVoid:!1},DL:{html_tag:"del",md_tag:"~",isVoid:!1},EM:{html_tag:"i",md_tag:"_",isVoid:!1},EX:{html_tag:"",md_tag:void 0,isVoid:!0},FM:{html_tag:"div",md_tag:void 0,isVoid:!1},HD:{html_tag:"",md_tag:void 0,isVoid:!1},HL:{html_tag:"span",md_tag:void 0,isVoid:!1},HT:{html_tag:"a",md_tag:void 0,isVoid:!1},IM:{html_tag:"img",md_tag:void 0,isVoid:!1},LN:{html_tag:"a",md_tag:void 0,isVoid:!1},MN:{html_tag:"a",md_tag:void 0,isVoid:!1},RW:{html_tag:"div",md_tag:void 0,isVoid:!1},QQ:{html_tag:"div",md_tag:void 0,isVoid:!1},ST:{html_tag:"b",md_tag:"*",isVoid:!1},TC:{html_tag:"div",md_tag:void 0,isVoid:!1},VC:{html_tag:"div",md_tag:void 0,isVoid:!1},VD:{html_tag:"video",md_tag:void 0,isVoid:!1}};function h(e,t,s){if(!e)return null;try{const s=atob(e),i=s.length,r=new ArrayBuffer(i),n=new Uint8Array(r);for(let e=0;e"",close:e=>""},EM:{open:e=>"",close:e=>""},DL:{open:e=>"",close:e=>""},CO:{open:e=>"",close:e=>""},BR:{open:e=>"
    ",close:e=>""},HD:{open:e=>"",close:e=>""},HL:{open:e=>'',close:e=>""},LN:{open:e=>'',close:e=>"",props:e=>e?{href:e.url,target:"_blank"}:null},MN:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},HT:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},BN:{open:e=>"",props:e=>e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null},AU:{open:e=>'",props:e=>e?{src:e.ref||h(e.val,e.mime,u.logger),"data-preload":e.ref?"metadata":"auto","data-duration":e.duration,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},IM:{open:e=>{const t=l(e._tempPreview,e.mime),s=h(e.val,e.mime,u.logger),i=e.ref||s;return(e.name?'':"")+''},close:e=>e.name?"":"",props:e=>e?{src:l(e._tempPreview,e.mime)||e.ref||h(e.val,e.mime,u.logger),title:e.name,alt:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},FM:{open:e=>"
    ",close:e=>"
    "},RW:{open:e=>"
    ",close:e=>"
    "},QQ:{open:e=>"
    ",close:e=>"
    ",props:e=>e?{}:null},TC:{open:e=>"
    ",close:e=>"
    ",props:e=>e?{"data-fn":e.fn,"data-title":e.title}:{}},VC:{open:e=>"
    ",close:e=>"
    ",props:e=>e?{"data-duration":e.duration,"data-state":e.state}:{}},VD:{open:e=>{const t=l(e._tempPreview,e.mime),s=e.ref||h(e.preview,e.premime||"image/jpeg",u.logger);return''},close:e=>"",props:e=>{if(!e)return null;const t=e.preref||h(e.preview,e.premime||"image/jpeg",u.logger);return{src:t,"data-src":e.ref||h(e.val,e.mime,u.logger),"data-width":e.width,"data-height":e.height,"data-preload":e.ref?"metadata":"auto","data-preview":t,"data-duration":0|e.duration,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}}}},u=function(){this.txt="",this.fmt=[],this.ent=[]};function p(e,t,s,i){const r=[];if(0==i.length)return[];for(let s in i){const n=i[s];n.at>t&&r.push({txt:e.slice(t,n.at)});const a={tp:n.tp},o=p(e,n.at+1,n.end,n.children);o.length>0?a.children=o:a.txt=n.txt,r.push(a),t=n.end+1}return ts.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=g(t[e].children);return t}function m(e){if(!e)return null;e="string"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||"",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const r=[],n=[];s.forEach(e=>{if(!e||"object"!=typeof e)return;if(!["undefined","number"].includes(typeof e.at))return;if(!["undefined","number"].includes(typeof e.len))return;let s=0|e.at,a=0|e.len;if(a<0)return;let o=e.key||0;i.length>0&&("number"!=typeof o||o<0||o>=i.length)||(s<=-1?n.push({start:-1,end:0,key:o}):s+a>R(t).length||(e.tp?r.push({type:e.tp,start:s,end:s+a}):i.length>0&&"object"==typeof i[o]&&r.push({start:s,end:s+a,key:o})))}),r.sort((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:a.indexOf(t.type)-a.indexOf(e.type))}),n.length>0&&r.push(...n),r.forEach(e=>{i.length>0&&!e.type&&i[e.key]&&"object"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type="HD")});const o=R(t);let c=_({},o,0,o.length,r);return c=w(c,function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e}),c}function f(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function _(e,t,s,i,r){if(!r||0==r.length)return se.segment).join("")}),e;for(let i=0;ie.segment).join("")}),s=n.start);const a=[];for(;ie.segment).join("")}),e}function b(e,t,s){if(!t)return e;e.txt=e.txt||"";const i=R(e.txt).length;if(t.text?e.txt+=t.text:Array.isArray(t.children)&&t.children.forEach(t=>{b(e,t,s)}),t.type){const r=R(e.txt).length-i;if(e.fmt=e.fmt||[],Object.keys(t.data||{}).length>0){e.ent=e.ent||[];const n=void 0===s[t.key]?e.ent.length:s[t.key];s[t.key]=n,e.ent[n]={tp:t.type,data:t.data},t.att?e.fmt.push({at:-1,len:0,key:n}):e.fmt.push({at:i,len:r,key:n})}else e.fmt.push({tp:t.type,at:i,len:r})}return e}function w(e,t,s){if(!e)return null;let i=t.call(s,e);if(!i||!i.children)return i;const r=[];for(let e in i.children){let n=i.children[e];n&&(n=w(n,t,s),n&&r.push(n))}return 0==r.length?i.children=null:i.children=r,i}function v(e,t,s,i,r){if(!e)return null;i&&e.type&&i.push(e.type);let n=[];for(let s in e.children){const a=v(e.children[s],t,s,i,r);a&&n.push(a)}return 0==n.length&&(n=e.text?[e.text]:null),i&&e.type&&i.pop(),t.call(r,e.type,e.data,n,s,i)}function y(e,t,s){return e?(s&&(t-=s.length),w(e,function(e){if(t<=-1)return null;if(e.att)return e;if(0==t)e.text=s,t=-1;else if(e.text){const i=R(e.text);i.length>t?(e.text=i.slice(0,t).map(e=>e.segment).join("")+s,t=-1):t-=i.length}return e})):null}function M(e,t){return w(e,e=>{const s=S(e.data,!0,t?t(e):null);return s?e.data=s:delete e.data,e})}function x(e){if("BR"==e.type)e=null;else if(e.text)e.type||(e.text=e.text.trimStart(),e.text||(e=null));else if(!e.type&&e.children&&e.children.length>0){const t=x(e.children[0]);t?e.children[0]=t:(e.children.shift(),e.type||0!=e.children.length||(e=null))}return e}function T(e,t){if(!e)return null;if(e.att)e.text=" ",delete e.att,delete e.children;else if(e.children){const s=[],i=[];for(let r in e.children){const n=e.children[r];if(n.att){if(s.length==t)continue;if(u.isFormResponseType(n.data.mime))continue;delete n.att,delete n.children,n.text=" ",s.push(n)}else i.push(n)}e.children=i.concat(s)}return e}function P(e,t){let s="",i=[];for(let r in e){const n=e[r];if(!n.txt){const e=P(n.children,s.length+t);n.txt=e.txt,i=i.concat(e.fmt)}n.tp&&i.push({at:s.length+t,len:n.txt.length,tp:n.tp}),s+=n.txt}return{txt:s,fmt:i}}function S(e,t,s){if(e&&Object.entries(e).length>0){s=s||[];const r={};if(i.forEach(i=>{if(e[i]){if(t&&!s.includes(i)&&("string"==typeof e[i]||Array.isArray(e[i]))&&e[i].length>64)return;if("object"==typeof e[i])return;r[i]=e[i]}}),0!=Object.entries(r).length)return r}return null}function E(e){return 0==Object.keys(e??{}).length}function A(e,t,s){const i=function(e){const t=[];let s=0,i=0;for(const{segment:r}of e){for(let e=0;e{let t,r,c=[];if(n.forEach(t=>{c=c.concat(function(e,t,s,i){const r=[];let n=0,a=e.slice(0);for(;a.length>0;){const o=t.exec(a);if(null==o)break;let c=o.index+o[0].lastIndexOf(o[1]);a=a.slice(c+1),c+=n,n=c+1;const h=s?s.exec(a):null;if(null==h)break;let l=h.index+h[0].indexOf(h[1]);a=a.slice(l+1),l+=n,n=l+1,r.push({txt:e.slice(c+1,l),children:[],at:c,end:l,tp:i})}return r}(e,t.start,t.end,t.name))}),0==c.length)r={txt:e};else{c.sort((e,t)=>{const s=e.at-t.at;return 0!=s?s:t.end-e.end}),c=g(c);const t=P(p(e,0,e.length,c),0);r={txt:t.txt,fmt:t.fmt}}if(t=function(e){let t,s=[];if(o.forEach(i=>{for(;null!==(t=i.re.exec(e));)s.push({offset:t.index,len:t[0].length,unique:t[0],data:i.pack(t[0]),type:i.name})}),0==s.length)return s;s.sort((e,t)=>e.offset-t.offset);let i=-1;return s=s.filter(e=>{const t=e.offset>i;return i=e.offset+e.len,t}),s}(r.txt),t.length>0){const e=[];for(let r in t){const n=t[r];let a=i[n.unique];a||(a=s.length,i[n.unique]=a,s.push({tp:n.type,data:n.data})),e.push({at:n.offset,len:n.len,key:a})}r.ent=e}a.push(r)});const c={txt:""};if(a.length>0){if(c.txt=a[0].txt,c.fmt=(a[0].fmt||[]).concat(a[0].ent||[]),c.fmt.length){const e=r.segment(c.txt);for(const t of c.fmt)({at:t.at,len:t.len}=A(t,e,c.txt))}for(let e=1;e{const{at:r,len:n}=A(e,i,t.txt);return e.at=r+s,e.len=n,e}))),t.ent&&(E(i)&&(i=r.segment(t.txt)),c.fmt=c.fmt.concat(t.ent.map(e=>{const{at:r,len:n}=A(e,i,t.txt);return e.at=r+s,e.len=n,e})))}0==c.fmt.length&&delete c.fmt,s.length>0&&(c.ent=s)}return c},u.append=function(e,t){if(!e)return t;if(!t)return e;e.txt=e.txt||"";const s=R(e.txt).length;return"string"==typeof t?e.txt+=t:t.txt&&(e.txt+=t.txt),Array.isArray(t.fmt)&&(e.fmt=e.fmt||[],Array.isArray(t.ent)&&(e.ent=e.ent||[]),t.fmt.forEach(i=>{const r={at:(0|i.at)+s,len:0|i.len};-1==i.at&&(r.at=-1,r.len=0),i.tp?r.tp=i.tp:(r.key=e.ent.length,e.ent.push(t.ent[i.key||0])),e.fmt.push(r)})),e},u.insertImage=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"IM",data:{mime:s.mime,ref:s.refurl,val:s.bits||s.preview,width:s.width,height:s.height,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.insertVideo=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"VD",data:{mime:s.mime,ref:s.refurl,val:s.bits,preref:s.preref,preview:s.preview,width:s.width,height:s.height,duration:0|s.duration,name:s.filename,size:0|s.size}};return s.urlPromise&&(i.data._tempPreview=s._tempPreview,i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e[0],i.data.preref=e[1],i.data._tempPreview=void 0,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.insertAudio=function(e,t,s){(e=e||{txt:" "}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:0|t,len:1,key:e.ent.length});const i={tp:"AU",data:{mime:s.mime,val:s.bits,duration:0|s.duration,preview:s.preview,name:s.filename,size:0|s.size,ref:s.refurl}};return s.urlPromise&&(i.data._processing=!0,s.urlPromise.then(e=>{i.data.ref=e,i.data._processing=void 0},e=>{i.data._processing=void 0})),e.ent.push(i),e},u.videoCall=function(e){return{txt:" ",fmt:[{at:0,len:1,key:0}],ent:[{tp:"VC",data:{aonly:e}}]}},u.updateVideoCall=function(e,t){const s=((e||{}).fmt||[])[0];if(!s)return e;let i;if("VC"==s.tp)delete s.tp,s.key=0,i={tp:"VC"},e.ent=[i];else if(i=(e.ent||[])[0|s.key],!i||"VC"!=i.tp)return e;return i.data=i.data||{},Object.assign(i.data,t),e},u.quote=function(e,t,s){const i=u.append(u.appendLineBreak(u.mention(e,t)),s);return i.fmt.push({at:0,len:R(i.txt).length,tp:"QQ"}),i},u.mention=function(e,t){return{txt:e||"",fmt:[{at:0,len:R(e||"").length,key:0}],ent:[{tp:"MN",data:{val:t}}]}},u.appendLink=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:e.txt.length,len:t.txt.length,key:e.ent.length}),e.txt+=t.txt;const s={tp:"LN",data:{url:t.url}};return e.ent.push(s),e},u.appendImage=function(e,t){return(e=e||{txt:""}).txt+=" ",u.insertImage(e,e.txt.length-1,t)},u.appendAudio=function(e,t){return(e=e||{txt:""}).txt+=" ",u.insertAudio(e,e.txt.length-1,t)},u.attachFile=function(e,t){(e=e||{txt:""}).ent=e.ent||[],e.fmt=e.fmt||[],e.fmt.push({at:-1,len:0,key:e.ent.length});const s={tp:"EX",data:{mime:t.mime,val:t.data,name:t.filename,ref:t.refurl,size:0|t.size}};return t.urlPromise&&(s.data._processing=!0,t.urlPromise.then(e=>{s.data.ref=e,s.data._processing=void 0},e=>{s.data._processing=void 0})),e.ent.push(s),e},u.wrapInto=function(e,t,s,i){return"string"==typeof e&&(e={txt:e}),e.fmt=e.fmt||[],e.fmt.push({at:s||0,len:i||e.txt.length,tp:t}),e},u.wrapAsForm=function(e,t,s){return u.wrapInto(e,"FM",t,s)},u.insertButton=function(e,t,s,i,r,n,a){return"string"==typeof e&&(e={txt:e}),!e||!e.txt||e.txt.length{switch(e.type){case"IM":return["val"];case"VD":return["preview"]}return null}),b({},s,[])):e},u.preview=function(e,t,s){let i=m(e);if(i=T(i,3),i=w(i,function(e){return"MN"==e.type?e.parent&&e.parent.type||!(e.text||"").startsWith("➦")||(e.text="➦",delete e.children):"QQ"==e.type?(e.text=" ",delete e.children):"BR"==e.type&&(e.text=" ",delete e.children,delete e.type),e}),i=y(i,t,"…"),s){const e={IM:["val"],VD:["preview"]};i=M(i,t=>e[t.type])}else i=M(i);return b({},i,[])},u.toPlainText=function(e){return"string"==typeof e?e:e.txt},u.isPlainText=function(e){return"string"==typeof e||!(e.fmt||e.ent)},u.toMarkdown=function(e){return v(m(e),function(e,t,s){const i=c[e];let r=s?s.join(""):"";return i&&(i.isVoid?r=i.md_tag||"":i.md_tag&&(r=i.md_tag+r+i.md_tag)),r},0)},u.isValid=function(e){if(!e)return!1;const{txt:t,fmt:s,ent:i}=e;if(!t&&""!==t&&!s&&!i)return!1;const r=typeof t;return!("string"!=r&&"undefined"!=r&&null!==t||void 0!==s&&!Array.isArray(s)&&null!==s||void 0!==i&&!Array.isArray(i)&&null!==i)},u.hasAttachments=function(e){if(!Array.isArray(e.fmt))return!1;for(let t in e.fmt){const s=e.fmt[t];if(s&&s.at<0){const t=e.ent[0|s.key];return t&&"EX"==t.tp&&t.data}}return!1},u.attachments=function(e,t,s){if(!Array.isArray(e.fmt))return;let i=0;for(let r in e.fmt){let n=e.fmt[r];if(n&&n.at<0){const r=e.ent[0|n.key];if(r&&"EX"==r.tp&&r.data&&t.call(s,r.data,i++,"EX"))break}}},u.hasEntities=function(e){return e.ent&&e.ent.length>0},u.entities=function(e,t,s){if(e.ent&&e.ent.length>0)for(let i in e.ent)if(e.ent[i]&&t.call(s,e.ent[i].data,i,e.ent[i].tp))break},u.styles=function(e,t,s){if(e.fmt&&e.fmt.length>0)for(let i in e.fmt){const r=e.fmt[i];if(r&&t.call(s,r.tp,r.at,r.len,r.key,i))break}},u.sanitizeEntities=function(e){if(e&&e.ent&&e.ent.length>0)for(let t in e.ent){const s=e.ent[t];if(s&&s.data){const i=S(s.data);i?e.ent[t].data=i:delete e.ent[t].data}}return e},u.getDownloadUrl=function(e){let t=null;return!u.isFormResponseType(e.mime)&&e.val?t=h(e.val,e.mime,u.logger):"string"==typeof e.ref&&(t=e.ref),t},u.isProcessing=function(e){return!!e._processing},u.getPreviewUrl=function(e){return e.val?h(e.val,e.mime,u.logger):null},u.getEntitySize=function(e){return e.size?e.size:e.val?.75*e.val.length|0:0},u.getEntityMimeType=function(e){return e.mime||"text/plain"},u.tagName=function(e){return c[e]&&c[e].html_tag},u.attrValue=function(e,t){if(t&&d[e]&&d[e].props)return d[e].props(t)},u.getContentType=function(){return t},u.contentType=t,u.isFormResponseType=function(e){return e===s||"application/json"===e},e.exports=u}},t={};function s(i){var r=t[i];if(void 0!==r)return r.exports;var n=t[i]={exports:{}};return e[i](n,n.exports,s),n.exports}s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var i in t)s.o(t,i)&&!s.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};s.r(i),s.d(i,{AccessMode:function(){return r},Drafty:function(){return q()},TheCard:function(){return $},Tinode:function(){return Z}});class r{constructor(e){e&&(this.given="number"==typeof e.given?e.given:r.decode(e.given),this.want="number"==typeof e.want?e.want:r.decode(e.want),this.mode=e.mode?"number"==typeof e.mode?e.mode:r.decode(e.mode):this.given&this.want)}static#e(e,t,s){if(["given","want","mode"].includes(t=t||"mode"))return 0!=(e[t]&s);throw new Error(`Invalid AccessMode component '${t}'`)}static decode(e){if(!e)return null;if("number"==typeof e)return e&r._BITMASK;if("N"===e||"n"===e)return r._NONE;const t={J:r._JOIN,R:r._READ,W:r._WRITE,P:r._PRES,A:r._APPROVE,S:r._SHARE,D:r._DELETE,O:r._OWNER};let s=r._NONE;for(let i=0;i=20&&t.length<=24&&["ts","touched","updated","created","when","deleted","expires"].includes(e)){const e=new Date(t);if(!isNaN(e))return e}else if("acs"===e&&"object"==typeof t)return new r(t);return t}function b(e){return e&&!/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(e)}function w(e){return e instanceof Date&&!isNaN(e)&&0!=e.getTime()}function v(e,t){if("object"!=typeof t){if(void 0===t)return e;if(t===p)return;return t}if(null===t)return e;if(t instanceof Date&&!isNaN(t))return!e||!(e instanceof Date)||isNaN(e)||e{"_"==t[0]?delete e[t]:e[t]?Array.isArray(e[t])&&0==e[t].length?delete e[t]:e[t]?e[t]instanceof Date?w(e[t])||delete e[t]:"object"==typeof e[t]&&(M(e[t]),0==Object.getOwnPropertyNames(e[t]).length&&delete e[t]):delete e[t]:delete e[t]}),e}function x(e,t){return Array.isArray(e)?(e.sort((e,t)=>e.low(s.low0&&(!s.hi||s.hi{if(0==e.length)e.push(t);else{let s=e[e.length-1];t.low<=s.hi?s.hi=Math.max(s.hi,t.hi):e.push(t)}return e},[])):[]}function T(e){return e.sort((e,t)=>e-t),e.reduce((e,t)=>{if(0==e.length)e.push({low:t});else{let s=e[e.length-1];!s.hi&&t!=s.low+1||t>s.hi?e.push({low:t}):s.hi=s.hi?Math.max(s.hi,t+1):t+1}return e},[])}let P,S;const E="Connection failed",A=418,R="Disconnected by client";function D(e,t,s,i){let r=null;return["http","https","ws","wss"].includes(t)&&(r=`${t}://${e}`,"/"!==r.charAt(r.length-1)&&(r+="/"),r+="v"+s+"/channels",["http","https"].includes(t)&&(r+="/lp"),r+="?apikey="+i),r}class I{static#t=e=>{};#s=null;#i=0;#r=!1;#n=null;host;secure;apiKey;version;autoreconnect;initialized;constructor(e,t,s){if(this.host=e.host,this.secure=e.secure,this.apiKey=e.apiKey,this.version=t,this.autoreconnect=s,"lp"===e.transport?(this.#a(),this.initialized="lp"):"ws"===e.transport&&(this.#o(),this.initialized="ws"),!this.initialized)throw I.#t("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'."),new Error("Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.")}static setNetworkProviders(e,t){P=e,S=t}static set logger(e){I.#t=e}connect(e,t){return Promise.reject(null)}reconnect(e){}disconnect(){}sendText(e){}isConnected(){return!1}transport(){return this.initialized}probe(){this.sendText("1")}backoffReset(){this.#c()}#h(){clearTimeout(this.#s);const e=Math.pow(2,this.#i)*(1+.3*Math.random())*2e3;this.#i=this.#i>=10?this.#i:this.#i+1,this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e),this.#s=setTimeout(t=>{if(I.#t(`Reconnecting, iter=${this.#i}, timeout=${e}`),this.#r)this.onAutoreconnectIteration&&this.onAutoreconnectIteration(-1);else{const e=this.connect();this.onAutoreconnectIteration?this.onAutoreconnectIteration(0,e):e.catch(e=>{})}},e)}#l(){clearTimeout(this.#s),this.#s=null}#c(){this.#i=0}#a(){let e=null,t=null,s=null,i=(t,s,r)=>{let n=new S,a=!1;return n.onreadystatechange=o=>{if(4==n.readyState)if(201==n.status){let r=JSON.parse(n.responseText,_);e=t+"&sid="+r.ctrl.params.sid,n=i(e),n.send(null),this.onOpen&&this.onOpen(),s&&(a=!0,s()),this.autoreconnect&&this.#l()}else if(n.status>0&&n.status<400)this.onMessage&&this.onMessage(n.responseText),n=i(e),n.send(null);else{if(r&&!a&&(a=!0,r(n.responseText)),this.onMessage&&n.responseText&&this.onMessage(n.responseText),this.onDisconnect){const e=n.status||(this.#r?A:503),t=n.responseText||(this.#r?R:E);this.onDisconnect(new f(t,e),e)}n=null,!this.#r&&this.autoreconnect&&this.#h()}},n.open("POST",t,!0),n};this.connect=(e,s)=>{if(this.#r=!1,t){if(!s)return Promise.resolve();t.onreadystatechange=void 0,t.abort(),t=null}return e&&(this.host=e),new Promise((e,s)=>{const r=D(this.host,this.secure?"https":"http",this.version,this.apiKey);I.#t("LP connecting to:",r),t=i(r,e,s),t.send(null)}).catch(e=>{I.#t("LP connection failed:",e)})},this.reconnect=e=>{this.#l(),this.connect(null,e)},this.disconnect=i=>{this.#r=!0,this.#l(),s&&(s.onreadystatechange=void 0,s.abort(),s=null),t&&(t.onreadystatechange=void 0,t.abort(),t=null),this.onDisconnect&&this.onDisconnect(new f(R,A),A),e=null},this.sendText=t=>{if(s=(e=>{const t=new S;return t.onreadystatechange=e=>{if(4==t.readyState&&t.status>=400)throw new f("LP sender failed",t.status)},t.open("POST",e,!0),t})(e),!s||1!=s.readyState)throw new Error("Long poller failed to connect");s.send(t)},this.isConnected=e=>t&&!0}#o(){this.connect=(e,t)=>{if(this.#r=!1,this.#n){if(!t&&this.#n.readyState==this.#n.OPEN)return this.probe(),Promise.resolve();this.#n.close(),this.#n=null}return e&&(this.host=e),new Promise((e,t)=>{const s=D(this.host,this.secure?"wss":"ws",this.version,this.apiKey);I.#t("WS connecting to: ",s);const i=new P(s);i.onerror=e=>{t(e)},i.onopen=t=>{this.autoreconnect&&this.#l(),this.onOpen&&this.onOpen(),e()},i.onclose=e=>{if(this.#n=null,this.onDisconnect){const e=this.#r?A:503;this.onDisconnect(new f(this.#r?R:E,e),e)}!this.#r&&this.autoreconnect&&this.#h()},i.onmessage=e=>{this.onMessage&&this.onMessage(e.data)},this.#n=i})},this.reconnect=e=>{this.#l(),this.connect(null,e)},this.disconnect=e=>{this.#r=!0,this.#l(),this.#n&&(this.#n.close(),this.#n=null)},this.sendText=e=>{if(!this.#n||this.#n.readyState!=this.#n.OPEN)throw new Error("Websocket is not connected");this.#n.send(e)},this.isConnected=e=>this.#n&&this.#n.readyState==this.#n.OPEN}onMessage=void 0;onDisconnect=void 0;onOpen=void 0;onAutoreconnectIteration=void 0}I.NETWORK_ERROR=503,I.NETWORK_ERROR_TEXT=E,I.NETWORK_USER=A,I.NETWORK_USER_TEXT=R;const N="tinode-web";let C;class k{#d=e=>{};#u=e=>{};db=null;disabled=!0;constructor(e,t){this.#d=e||this.#d,this.#u=t||this.#u}#p(e,t,s){return this.db?new Promise((i,r)=>{const n=this.db.transaction([e]);n.onerror=t=>{this.#u("PCache","mapObjects",e,t.target.error),r(t.target.error)},n.objectStore(e).getAll().onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}initDatabase(){return new Promise((e,t)=>{const s=C.open(N,3);s.onsuccess=t=>{this.db=t.target.result,this.disabled=!1,this.db.onversionchange=e=>{this.#u("PCache","another tab tries to upgrade DB, shutting down"),this.db.close(),this.db=null,this.disabled=!0},e(this.db)},s.onerror=e=>{this.#u("PCache","failed to initialize",e),t(e.target.error),this.#d(e.target.error)},s.onupgradeneeded=e=>{if(this.db=e.target.result,this.db.onerror=e=>{this.#u("PCache","failed to create storage",e),this.#d(e.target.error)},this.db.objectStoreNames.contains("topic")||this.db.createObjectStore("topic",{keyPath:"name"}),this.db.objectStoreNames.contains("user")||this.db.createObjectStore("user",{keyPath:"uid"}),this.db.objectStoreNames.contains("subscription")||this.db.createObjectStore("subscription",{keyPath:["topic","uid"]}),this.db.objectStoreNames.contains("message")||this.db.createObjectStore("message",{keyPath:["topic","seq"]}),!this.db.objectStoreNames.contains("dellog")){const e=this.db.createObjectStore("dellog",{keyPath:["topic","low","hi"]});e.indexNames.contains("topic_clear")||e.createIndex("topic_clear",["topic","clear"],{unique:!1})}}})}deleteDatabase(){return this.db&&(this.db.close(),this.db=null),new Promise((e,t)=>{const s=C.deleteDatabase(N);s.onblocked=e=>{this.db&&this.db.close();const s=new Error("blocked");this.#u("PCache","deleteDatabase",s),t(s)},s.onsuccess=t=>{this.db=null,this.disabled=!0,e(!0)},s.onerror=e=>{this.#u("PCache","deleteDatabase",e.target.error),t(e.target.error)}})}isReady(){return!!this.db}updTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["topic"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","updTopic",e.target.error),s(e.target.error)};const r=i.objectStore("topic").get(e.name);r.onsuccess=t=>{i.objectStore("topic").put(k.#g(r.result,e)),i.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}markTopicAsDeleted(e,t){return this.isReady()?new Promise((s,i)=>{const r=this.db.transaction(["topic"],"readwrite");r.oncomplete=e=>{s(e.target.result)},r.onerror=e=>{this.#u("PCache","markTopicAsDeleted",e.target.error),i(e.target.error)},r.objectStore("topic").get(e).onsuccess=e=>{const s=e.target.result;s&&s._deleted!=t&&(s._deleted=t,r.objectStore("topic").put(s)),r.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remTopic(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["topic","subscription","message"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remTopic",e.target.error),s(e.target.error)},i.objectStore("topic").delete(IDBKeyRange.only(e)),i.objectStore("subscription").delete(IDBKeyRange.bound([e,"-"],[e,"~"])),i.objectStore("message").delete(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER])),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapTopics(e,t){return this.#p("topic",e,t)}deserializeTopic(e,t){k.#m(e,t)}updUser(e,t){if(!(arguments.length<2||void 0===t))return this.isReady()?new Promise((s,i)=>{const r=this.db.transaction(["user"],"readwrite");r.oncomplete=e=>{s(e.target.result)},r.onerror=e=>{this.#u("PCache","updUser",e.target.error),i(e.target.error)},r.objectStore("user").put({uid:e,public:t}),r.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["user"],"readwrite");i.oncomplete=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","remUser",e.target.error),s(e.target.error)},i.objectStore("user").delete(IDBKeyRange.only(e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapUsers(e,t){return this.#p("user",e,t)}getUser(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["user"]);i.oncomplete=e=>{const s=e.target.result;t({user:s.uid,public:s.public})},i.onerror=e=>{this.#u("PCache","getUser",e.target.error),s(e.target.error)},i.objectStore("user").get(e)}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updSubscription(e,t,s){return this.isReady()?new Promise((i,r)=>{const n=this.db.transaction(["subscription"],"readwrite");n.oncomplete=e=>{i(e.target.result)},n.onerror=e=>{this.#u("PCache","updSubscription",e.target.error),r(e.target.error)},n.objectStore("subscription").get([e,t]).onsuccess=i=>{n.objectStore("subscription").put(k.#f(i.target.result,e,t,s)),n.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}mapSubscriptions(e,t,s){return this.isReady()?new Promise((i,r)=>{const n=this.db.transaction(["subscription"]);n.onerror=e=>{this.#u("PCache","mapSubscriptions",e.target.error),r(e.target.error)},n.objectStore("subscription").getAll(IDBKeyRange.bound([e,"-"],[e,"~"])).onsuccess=e=>{t&&e.target.result.forEach(e=>{t.call(s,e)}),i(e.target.result)}}):this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"))}addMessage(e){return this.isReady()?new Promise((t,s)=>{const i=this.db.transaction(["message"],"readwrite");i.onsuccess=e=>{t(e.target.result)},i.onerror=e=>{this.#u("PCache","addMessage",e.target.error),s(e.target.error)},i.objectStore("message").add(k.#_(null,e)),i.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updMessageStatus(e,t,s){return this.isReady()?new Promise((i,r)=>{const n=this.db.transaction(["message"],"readwrite");n.onsuccess=e=>{i(e.target.result)},n.onerror=e=>{this.#u("PCache","updMessageStatus",e.target.error),r(e.target.error)};const a=n.objectStore("message").get(IDBKeyRange.only([e,t]));a.onsuccess=i=>{const r=a.result||i.target.result;r&&r._status!=s&&n.objectStore("message").put(k.#_(r,{topic:e,seq:t,_status:s})),n.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}updMessageReact(e,t,s){return this.isReady()?new Promise((i,r)=>{const n=this.db.transaction(["message"],"readwrite");n.onsuccess=e=>{i(e.target.result)},n.onerror=e=>{this.#u("PCache","updMessageReact",e.target.error),r(e.target.error)};const a=n.objectStore("message").get(IDBKeyRange.only([e,t]));a.onsuccess=i=>{const r=a.result||i.target.result;r&&r.react!==s&&n.objectStore("message").put(k.#_(r,{topic:e,seq:t,react:s})),n.commit()}}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}remMessages(e,t,s){return this.isReady()?new Promise((i,r)=>{t||s||(t=0,s=Number.MAX_SAFE_INTEGER);const n=s>0?IDBKeyRange.bound([e,t],[e,s],!1,!0):IDBKeyRange.only([e,t]),a=this.db.transaction(["message"],"readwrite");a.onsuccess=e=>{i(e.target.result)},a.onerror=e=>{this.#u("PCache","remMessages",e.target.error),r(e.target.error)},a.objectStore("message").delete(n),a.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readMessages(e,t,s,i){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"));const r=this.db.transaction(["message"]);let n=[];return Array.isArray(t.ranges)?new Promise((a,o)=>{r.onerror=e=>{this.#u("PCache","readMessages",e.target.error),o(e.target.error)};let c=0;t.ranges.forEach(o=>{const h=o.hi?IDBKeyRange.bound([e,o.low],[e,o.hi],!1,!0):IDBKeyRange.only([e,o.low]);r.objectStore("message").getAll(h).onsuccess=e=>{const r=e.target.result;r&&(s&&s.call(i,r),Array.isArray(r)?n=n.concat(r):n.push(r)),c++,c==t.ranges.length&&a(n)}})}):new Promise((a,o)=>{const c=t.since>0?t.since:0,h=t.before>0?t.before:Number.MAX_SAFE_INTEGER,l=0|t.limit;r.onerror=e=>{this.#u("PCache","readMessages",e.target.error),o(e.target.error)};const d=IDBKeyRange.bound([e,c],[e,h],!1,!0);r.objectStore("message").openCursor(d,"prev").onsuccess=e=>{const t=e.target.result;t?(s&&s.call(i,t.value),n.push(t.value),l<=0||n.length{const n=this.db.transaction(["dellog"],"readwrite");n.onsuccess=e=>{i(e.target.result)},n.onerror=e=>{this.#u("PCache","addDelLog",e.target.error),r(e.target.error)},s.forEach(s=>n.objectStore("dellog").add({topic:e,clear:t,low:s.low,hi:s.hi||s.low+1})),n.commit()}):this.disabled?Promise.resolve():Promise.reject(new Error("not initialized"))}readDelLog(e,t){if(t=t||{},!this.isReady())return this.disabled?Promise.resolve([]):Promise.reject(new Error("not initialized"));const s=this.db.transaction(["dellog"]);let i=[];return Array.isArray(t.ranges)?new Promise((r,n)=>{s.onerror=e=>{this.#u("PCache","readDelLog",e.target.error),n(e.target.error)};let a=0;t.ranges.forEach(n=>{const o=n.hi||n.low+1,c=IDBKeyRange.bound([e,0,n.low],[e,o,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore("dellog").getAll(c).onsuccess=e=>{const s=e.target.result;s&&(Array.isArray(s)?i=i.concat(s.map(e=>({low:e.low,hi:e.hi}))):i.push({low:s.low,hi:s.hi})),a++,a==t.ranges.length&&r(i)}})}):new Promise((i,r)=>{const n=t.since>0?t.since:0,a=t.before>0?t.before:Number.MAX_SAFE_INTEGER,o=0|t.limit;s.onerror=e=>{this.#u("PCache","readDelLog",e.target.error),r(e.target.error)};let c=0;const h=[],l=IDBKeyRange.bound([e,0,n],[e,a,Number.MAX_SAFE_INTEGER],!1,!0);s.objectStore("dellog").openCursor(l,"prev").onsuccess=e=>{const t=e.target.result;t?(h.push({low:t.value.low,hi:t.value.hi}),c+=t.value.hi-t.value.low,o<=0||c{const i=this.db.transaction(["dellog"]);i.onerror=e=>{this.#u("PCache","maxDelId",e.target.error),s(e.target.error)},i.objectStore("dellog").index("topic_clear").openCursor(IDBKeyRange.bound([e,0],[e,Number.MAX_SAFE_INTEGER]),"prev").onsuccess=e=>{e.target.result&&t(e.target.result.value)}}):this.disabled?Promise.resolve(0):Promise.reject(new Error("not initialized"))}static#b=["created","updated","deleted","touched","read","recv","seq","clear","mrrid","defacs","creds","public","trusted","private","_aux","_deleted","_mrrSeen"];static#m(e,t){k.#b.forEach(s=>{t.hasOwnProperty(s)&&(e[s]=t[s])}),Array.isArray(t.tags)&&(e._tags=t.tags),t.acs&&e.setAccessMode(t.acs),e.seq|=0,e.read|=0,e.unread=Math.max(0,e.seq-e.read)}static#g(e,t){const s=e||{name:t.name};return k.#b.forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),Array.isArray(t._tags)&&(s.tags=t._tags),t.acs&&(s.acs=t.getAccessMode().jsonHelper()),s}static#f(e,t,s,i){const r=e||{topic:t,uid:s};return["updated","mode","read","recv","clear","lastSeen","userAgent"].forEach(e=>{i.hasOwnProperty(e)&&(r[e]=i[e])}),r}static#_(e,t){const s=e||{};return["topic","seq","ts","_status","from","head","content","react"].forEach(e=>{t.hasOwnProperty(e)&&(s[e]=t[e])}),s}static setDatabaseProvider(e){C=e}}var O=s(767),q=s.n(O);let U;class j{constructor(e,t){this._tinode=e,this._version=t,this._apiKey=e._apiKey,this._authToken=e.getAuthToken(),this.xhr=[]}uploadWithBaseUrl(e,t,s,i,r,n){let a=`/v${this._version}/file/u/`;if(e){let t=e;if(t.endsWith("/")&&(t=t.slice(0,-1)),!t.startsWith("http://")&&!t.startsWith("https://"))throw new Error(`Invalid base URL '${e}'`);a=t+a}const o=this,c=new U;this.xhr.push(c),c.open("POST",a,!0),c.setRequestHeader("X-Tinode-APIKey",this._apiKey),this._authToken&&c.setRequestHeader("X-Tinode-Auth",`Token ${this._authToken.token}`);let h=null,l=null;const d=new Promise((e,t)=>{h=e,l=t});c.upload.onprogress=e=>{e.lengthComputable&&(i&&i(e.loaded/e.total,t.type||"application/octet-stream"),this.onProgress&&this.onProgress(e.loaded/e.total,t.type||"application/octet-stream"))},c.onload=function(){let e;try{e=JSON.parse(this.response,_)}catch(t){o._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.response),e={ctrl:{code:this.status,text:this.statusText}}}this.status>=200&&this.status<300?(h&&h(e.ctrl.params.url),r&&r(e.ctrl)):this.status>=400?(l&&l(new f(e.ctrl.text,e.ctrl.code)),n&&n(e.ctrl)):o._tinode.logger("ERROR: Unexpected server response status",this.status,this.response)},c.onerror=function(e){l&&l(e||new Error("failed")),n&&n(null)},c.onabort=function(e){l&&l(new Error("upload cancelled by user")),n&&n(null)};try{const e=new FormData;e.append("file",t),e.set("id",this._tinode.getNextUniqueId()),s&&e.set("topic",s),c.send(e)}catch(e){l&&l(e),n&&n(null)}return d}upload(e,t,s,i,r){const n=(this._tinode._secure?"https://":"http://")+this._tinode._host;return this.uploadWithBaseUrl(n,e,t,s,i,r)}download(e,t,s,i,r){if(!b(e))return void(r&&r(`The URL '${e}' must be relative, not absolute`));if(!this._authToken)return void(r&&r("Must authenticate first"));const n=this,a=new U;this.xhr.push(a),e=function(e){const t=new URL(e,window.location.origin);return t.searchParams.append("asatt","1"),t.toString().substring(window.location.origin.length)}(e),a.open("GET",e,!0),a.setRequestHeader("X-Tinode-APIKey",this._apiKey),a.setRequestHeader("X-Tinode-Auth","Token "+this._authToken.token),a.responseType="blob",a.onprogress=function(e){i&&i(e.loaded)};let o=null,c=null;const h=new Promise((e,t)=>{o=e,c=t});a.onload=function(){if(200==this.status){const e=document.createElement("a");e.href=window.URL.createObjectURL(new Blob([this.response],{type:s})),e.style.display="none",e.setAttribute("download",t),document.body.appendChild(e),e.click(),document.body.removeChild(e),window.URL.revokeObjectURL(e.href),o&&o()}else if(this.status>=400&&c){const e=new FileReader;e.onload=function(){try{const e=JSON.parse(this.result,_);c(new f(e.ctrl.text,e.ctrl.code))}catch(e){n._tinode.logger("ERROR: Invalid server response in LargeFileHelper",this.result),c(e)}},e.readAsText(this.response)}},a.onerror=function(e){c&&c(new Error("failed")),r&&r(e)},a.onabort=function(){c&&c(null)};try{a.send()}catch(e){c&&c(e),r&&r(e)}return h}cancel(){this.xhr.forEach(e=>{e.readyState<4&&e.abort()})}static setNetworkProvider(e){U=e}}class L{constructor(e){this.topic=e,this.what={}}#w(){return this.topic._deleted?void 0:this.topic.updated}#v(){return this.topic.isP2PType()?this.#w():this.topic._deleted?void 0:this.topic._lastSubsUpdate}withData(e,t,s){return this.what.data={since:e,before:t,limit:s},this}withLaterData(e){return this.withData(this.topic._maxSeq>0?this.topic._maxSeq+1:void 0,void 0,e)}withDataRanges(e,t){return this.what.data={ranges:x(e,this.topic._maxSeq),limit:t},this}withDataList(e){return this.withDataRanges(T(e))}withEarlierData(e){return this.withData(void 0,this.topic._minSeq>0?this.topic._minSeq:void 0,e)}withDesc(e){return this.what.desc={ims:e},this}withLaterDesc(){return this.withDesc(this.#w())}withSub(e,t,s){const i={ims:e,limit:t};return"me"==this.topic.getType()?i.topic=s:i.user=s,this.what.sub=i,this}withOneSub(e,t){return this.withSub(e,void 0,t)}withLaterOneSub(e){return this.withOneSub(this.topic._lastSubsUpdate,e)}withLaterSub(e){return this.withSub(this.#v(),e)}withTags(){return this.what.tags=!0,this}withCred(){return"me"==this.topic.getType()?this.what.cred=!0:this.topic._tinode.logger("ERROR: Invalid topic type for MetaGetBuilder:withCreds",this.topic.getType()),this}withAux(){return this.what.aux=!0,this}withDel(e,t){return(e||t)&&(this.what.del={since:e,limit:t}),this}withLaterDel(e){return this.withDel(this.topic._maxSeq>0?this.topic._maxDel+1:void 0,e)}extract(e){return this.what[e]}build(){const e=[];let t={};return["data","sub","desc","tags","cred","aux","del"].forEach(s=>{this.what.hasOwnProperty(s)&&(e.push(s),Object.getOwnPropertyNames(this.what[s]).length>0&&(t[s]=this.what[s]))}),e.length>0?t.what=e.join(" "):t=void 0,t}}class V{#y=void 0;#M=!1;buffer=[];constructor(e,t){this.#y=e||((e,t)=>e===t?0:e0)){o=!0;break}r=n-1}return o?{idx:n,exact:!0}:s?{idx:-1}:{idx:a<0?n+1:n}}#T(e,t){const s=this.#x(e,t,!1),i=s.exact&&this.#M?1:0;return t.splice(s.idx,i,e),t}getAt(e){return this.buffer[e]}getLast(e){return e?this.buffer.findLast(e):this.buffer[this.buffer.length-1]}put(){let e;e=1==arguments.length&&Array.isArray(arguments[0])?arguments[0]:arguments;for(let t in e)this.#T(e[t],this.buffer)}delAt(e){e|=0;let t=this.buffer.splice(e,1);if(t&&t.length>0)return t[0]}delRange(e,t){return this.buffer.splice(e,t-e)}length(){return this.buffer.length}reset(){this.buffer=[]}forEach(e,t,s,i){t=Math.max(0,0|t),s=Math.min(s||this.buffer.length,this.buffer.length);for(let r=t;rt?this.buffer[r-1]:void 0,re.seq-t.seq,!0),this._attached=!1,this._lastSubsUpdate=new Date(0),this._new=!0,this._deleted=!1,this._delayedLeaveTimer=null,t&&(this.onData=t.onData,this.onMeta=t.onMeta,this.onPres=t.onPres,this.onInfo=t.onInfo,this.onMetaDesc=t.onMetaDesc,this.onMetaSub=t.onMetaSub,this.onSubsUpdated=t.onSubsUpdated,this.onTagsUpdated=t.onTagsUpdated,this.onCredsUpdated=t.onCredsUpdated,this.onAuxUpdated=t.onAuxUpdated,this.onReact=t.onReact,this.onDeleteTopic=t.onDeleteTopic,this.onAllMessagesReceived=t.onAllMessagesReceived)}static topicType(e){return{me:h,fnd:l,grp:d,new:d,nch:d,chn:d,usr:"p2p",sys:"sys",slf:"slf"}["string"==typeof e?e.substring(0,3):"xxx"]}static isMeTopicName(e){return W.topicType(e)==h}static isSelfTopicName(e){return"slf"==W.topicType(e)}static isGroupTopicName(e){return W.topicType(e)==d}static isP2PTopicName(e){return"p2p"==W.topicType(e)}static isCommTopicName(e){return W.isP2PTopicName(e)||W.isGroupTopicName(e)||W.isSelfTopicName(e)}static isNewGroupTopicName(e){return"string"==typeof e&&(e.substring(0,3)==o||e.substring(0,3)==c)}static isChannelTopicName(e){return"string"==typeof e&&("chn"==e.substring(0,3)||e.substring(0,3)==c)}static#P(e){return e.head&&e.head.replace}isSubscribed(){return this._attached}subscribe(e,t){return clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=null,this._attached?Promise.resolve(this):this._tinode.subscribe(this.name||o,e,t).then(e=>{if(e.code>=300)return e;if(this._attached=!0,this._deleted=!1,this.acs=e.params&&e.params.acs?e.params.acs:this.acs,this._new){if(delete this._new,this.name!=e.topic&&(this._cacheDelSelf(),this.name=e.topic),this._cachePutSelf(),this.created=e.ts,this.updated=e.ts,this.name!=h&&this.name!=l){const e=this._tinode.getMeTopic();e.onMetaSub&&e.onMetaSub(this),e.onSubsUpdated&&e.onSubsUpdated([this.name],1)}t&&t.desc&&(t.desc._noForwarding=!0,this._processMetaDesc(t.desc))}return e})}createMessage(e,t){return this._tinode.createMessage(this.name,e,t)}publish(e,t){return this.publishMessage(this.createMessage(e,t))}publishMessage(e){if(!this._attached)return Promise.reject(new Error("Cannot publish on inactive topic"));if(this._sending)return Promise.reject(new Error("The message is already being sent"));e._sending=!0,e._failed=!1;let t=null;return q().hasEntities(e.content)&&(t=[],q().entities(e.content,e=>{e&&(e.ref&&t.push(e.ref),e.preref&&t.push(e.preref))}),0==t.length&&(t=null)),this._tinode.publishMessage(e,t).then(t=>(e._sending=!1,e.ts=t.ts,this.swapMessageId(e,t.params.seq),this._maybeUpdateMessageVersionsCache(e),this._routeData(e),t)).catch(t=>{this._tinode.logger("WARNING: Message rejected by the server",t),e._sending=!1,e._failed=!0,this.onData&&this.onData()})}publishDraft(e,t){const s=e.seq||this._getQueuedSeqId();return e._noForwarding||(e._noForwarding=!0,e.seq=s,e.ts=new Date,e.from=this._tinode.getCurrentUserID(),e.noecho=!0,this._messages.put(e),this._tinode._db.addMessage(e),this.onData&&this.onData(e)),(t||Promise.resolve()).then(t=>e._cancelled?{code:300,text:"cancelled"}:this.publishMessage(e)).catch(t=>{throw this._tinode.logger("WARNING: Message draft rejected",t),e._sending=!1,e._failed=!0,e._fatal=t instanceof f&&t.code>=400&&t.code<500,this.onData&&this.onData(),t})}leave(e){return this._attached||e?this._tinode.leave(this.name,e).then(t=>(this._resetSub(),e&&this._gone(),t)):Promise.reject(new Error("Cannot leave inactive topic"))}leaveDelayed(e,t){clearTimeout(this._delayedLeaveTimer),this._delayedLeaveTimer=setTimeout(t=>{this._delayedLeaveTimer=null,this.leave(e)},t)}getMeta(e){return this._tinode.getMeta(this.name,e)}getMessagesPage(e,t,s,i,r){let n=t?this.startMetaQuery().withDataRanges(t,e):r?this.startMetaQuery().withData(s,void 0,e):this.startMetaQuery().withData(void 0,i,e);return this._loadMessages(this._tinode._db,n.extract("data")).then(a=>0==(t=this.msgHasMoreMessages(s,i,r)).length?Promise.resolve({topic:this.name,code:200,params:{count:a}}):(e-=a,n=this.startMetaQuery().withDataRanges(t,e),this.getMeta(n.build())))}getPinnedMessages(){const e=this.aux("pins");if(!Array.isArray(e))return Promise.resolve(0);const t=[];let s=e;return this._tinode._db.readMessages(this.name,{ranges:T(s)}).then(i=>(i.forEach(e=>{e&&(t.push(e.seq),this._messages.put(e),this._maybeUpdateMessageVersionsCache(e))}),t.length!t.includes(e)),this._tinode._db.readMessages(this.name,{ranges:T(s)})):null)).then(i=>(i&&s.forEach(e=>{i.find(t=>t.low<=e&&t.hi>e)&&t.push(e)}),t.length==e.length?Promise.resolve({topic:this.name,code:200,params:{count:t.length}}):(s=e.filter(e=>!t.includes(e)),this.getMeta(this.startMetaQuery().withDataList(s).build()))))}setMeta(e){return e.tags&&(e.tags=function(e){let t=[];if(Array.isArray(e)){for(let s=0,i=e.length;s1&&t.push(i))}t=t.sort().filter((e,t,s)=>!t||e!=s[t-1])}return 0==t.length&&t.push(p),t}(e.tags)),this._tinode.setMeta(this.name,e).then(t=>(t&&t.code>=300||(e.sub&&(e.sub.topic=this.name,t.params&&t.params.acs&&(e.sub.acs=t.params.acs,e.sub.updated=t.ts),e.sub.user||(e.sub.user=this._tinode.getCurrentUserID(),e.desc||(e.desc={})),e.sub._noForwarding=!0,this._processMetaSubs([e.sub])),e.desc&&(t.params&&t.params.acs&&(e.desc.acs=t.params.acs,e.desc.updated=t.ts),this._processMetaDesc(e.desc)),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds([e.cred],!0),e.aux&&this._processMetaAux(e.aux),e.react&&(e.react.mrrid=0|t.params?.mrrid,this._processMetaReact(void 0,e.react))),t))}updateMode(e,t){const s=e?this.subscriber(e):null,i=s?s.acs.updateGiven(t).getGiven():this.getAccessMode().updateWant(t).getWant();return this.setMeta({sub:{user:e,mode:i}})}invite(e,t){return this.setMeta({sub:{user:e,mode:t}})}archive(e){return this.private&&!this.private.arch==!e?Promise.resolve(e):this.setMeta({desc:{private:{arch:!!e||p}}})}pinMessage(e,t){let s=this.aux("pins");Array.isArray(s)||(s=[]);let i=!1;return t?s.includes(e)||(i=!0,5==s.length&&s.shift(),s.push(e)):s.includes(e)&&(i=!0,s=s.filter(t=>t!=e),0==s.length&&(s=p)),i?this.setMeta({aux:{pins:s}}):Promise.resolve()}pinTopic(e,t){return Promise.reject(new Error("Pinning topics is not supported here"))}pinnedTopicRank(e){return 0}react(e,t){return e&&t?(this.msgMyReaction(e)==t&&(t=p),this.setMeta({react:{seq:e,val:t}})):Promise.reject(new Error("Invalid parameters"))}reactions(){const e=this.aux("react");return e?e.vals:this._tinode.getServerParam(m)}markReactionsSeen(){this._mrrSeen!=this.mrrid&&(this._mrrSeen=this.mrrid,this._tinode.getMeTopic()._refreshContact("react",this))}delMessages(e,t){if(!this._attached)return Promise.reject(new Error("Cannot delete messages in inactive topic"));const s=x(e,this._maxSeq);let i;return i=s.length>0?this._tinode.delMessages(this.name,s,t):Promise.resolve({params:{del:0}}),i.then(t=>(t.params.del>this._maxDel&&(this._maxDel=Math.max(t.params.del,this._maxDel),this.clear=Math.max(t.params.del,this.clear)),e.forEach(e=>{e.hi?this.flushMessageRange(e.low,e.hi):this.flushMessage(e.low),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,t.params.del,e),this.onData&&this.onData(),t))}delMessagesAll(e){return!this._maxSeq||this._maxSeq<=0?Promise.resolve():this.delMessages([{low:1,hi:this._maxSeq+1,_all:!0}],e)}delMessagesList(e,t){return this.delMessages(T(e),t)}delMessagesEdits(e,t){const s=[e];return this.messageVersions(e,e=>s.push(e.seq)),this.delMessagesList(s,t)}delTopic(e){return this._deleted?(this._gone(),Promise.resolve(null)):this._tinode.delTopic(this.name,e).then(e=>(this._deleted=!0,this._resetSub(),this._gone(),e))}delSubscription(e){return this._attached?this._tinode.delSubscription(this.name,e).then(t=>(delete this._users[e],this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._users)),t)):Promise.reject(new Error("Cannot delete subscription in inactive topic"))}note(e,t){if(!this._attached)return;const s=this._users[this._tinode.getCurrentUserID()];let i=!1;s?(!s[e]||s[e]0&&this.note("read",e)}noteKeyPress(){this._attached?this._tinode.noteKeyPress(this.name):this._tinode.logger("INFO: Cannot send notification in inactive topic")}noteRecording(e){this._attached?this._tinode.noteKeyPress(this.name,e?"kpa":"kpv"):this._tinode.logger("INFO: Cannot send notification in inactive topic")}noteUpload(e){this._attached?this._tinode.noteKeyPress(this.name,{image:"kpui",video:"kpuv",file:"kpu"}[e]||"kpu"):this._tinode.logger("INFO: Cannot send notification in inactive topic")}videoCall(e,t,s){(this._attached||["ringing","hang-up"].includes(e))&&this._tinode.videoCall(this.name,t,e,s)}_updateMyReadRecv(e,t,s){let i,r=!1;switch(t|=0,this.seq=0|this.seq,this.read=0|this.read,this.recv=0|this.recv,e){case"recv":i=this.recv,this.recv=Math.max(this.recv,t),r=i!=this.recv;break;case"read":i=this.read,this.read=Math.max(this.read,t),r=i!=this.read;break;case"msg":i=this.seq,this.seq=Math.max(this.seq,t),(!this.touched||this.touchede.startsWith(g));if(e)return e.substring(6)}subscriber(e){return this._users[e]}messageVersions(e,t,s){if(!t)return;const i=this._messageVersions[e];i&&i.forEach(t,void 0,void 0,s)}messages(e,t,s,i){const r=e||this.onData;if(r){const e="number"==typeof t?this._messages.find({seq:t},!0):void 0,n="number"==typeof s?this._messages.find({seq:s},!0):void 0;if(-1!=e&&-1!=n){let t=[];this._messages.forEach((e,s,i,r)=>{if(W.#P(e))return;if(e._deleted)return;const n=this.latestMsgVersion(e.seq)||e;n._origTs||(n._origTs=n.ts,n._origSeq=n.seq,n.ts=e.ts,n.seq=e.seq),t.push({data:n,idx:r})},e,n,{}),t.forEach((e,s)=>{r.call(i,e.data,s>0?t[s-1].data:void 0,s=0)return this._messages.getAt(t)}latestMessage(){return this._messages.getLast(e=>!e._deleted)}latestMsgVersion(e){const t=this._messageVersions[e];return t?t.getLast():null}maxMsgSeq(){return this._maxSeq}minMsgSeq(){return this._minSeq}maxClearId(){return this._maxDel}messageCount(){return this._messages.length()}queuedMessages(e,t){if(!e)throw new Error("Callback must be provided");this.messages(e,u,void 0,t)}msgReceiptCount(e,t){let s=0;if(t>0){const i=this._tinode.getCurrentUserID();for(let r in this._users){const n=this._users[r];n.user!==i&&n[e]>=t&&s++}}return s}msgReadCount(e){return this.msgReceiptCount("read",e)}msgRecvCount(e){return this.msgReceiptCount("recv",e)}msgReactions(e){const t=this.findMessage(e);return t&&t.react||[]}msgMyReaction(e){const t=this.msgReactions(e),s=this._tinode.getCurrentUserID();for(let e=0;ethis._mrrSeen}msgHasMoreMessages(e,t,s){const i=[];if(e>=t)return i;let r,n=0;return this._messages.forEach((a,o)=>{const c=o||{seq:0},h=c._deleted?c.hi:c.seq+1;r=a.seq>h?{low:h,hi:a.seq}:null,r&&(s?r.hi>=e:r.low=e:r.low=0)return this._tinode._db.remMessages(this.name,e),this._messages.delAt(t)}flushMessageRange(e,t){this._tinode._db.remMessages(this.name,e,t);for(let s=e;s=0?this._messages.delRange(s,this._messages.find({seq:t},!0)):[]}swapMessageId(e,t){const s=this._messages.find(e),i=this._messages.length();0<=s&&s=0){const s=this._messages.getAt(t),i=this.msgStatus(s);if(10==i||30==i||40==i)return this._tinode._db.remMessages(this.name,e),s._cancelled=!0,this._messages.delAt(t),this.onData&&this.onData(),!0}return!1}getType(){return W.topicType(this.name)}getAccessMode(){return this.acs}setAccessMode(e){return this.acs=new r(e)}getDefaultAccess(){return this.defacs}startMetaQuery(){return new L(this)}isArchived(){return this.private&&!!this.private.arch}isMeType(){return W.isMeTopicName(this.name)}isSelfType(){return W.isSelfTopicName(this.name)}isChannelType(){return W.isChannelTopicName(this.name)}isGroupType(){return W.isGroupTopicName(this.name)}isP2PType(){return W.isP2PTopicName(this.name)}isCommType(){return W.isCommTopicName(this.name)}msgStatus(e,t){let s=0;return this._tinode.isMe(e.from)?e._sending?s=20:e._fatal||e._cancelled?s=40:e._failed?s=30:e.seq>=u?s=10:this.msgReadCount(e.seq)>0?s=70:this.msgRecvCount(e.seq)>0?s=60:e.seq>0&&(s=50):s=80,t&&e._status!=s&&(e._status=s,this._tinode._db.updMessageStatus(this.name,e.seq,s)),s}_maybeUpdateMessageVersionsCache(e){if(!W.#P(e))return void(this._messageVersions[e.seq]&&(this._messageVersions[e.seq].filter(t=>t.from==e.from),this._messageVersions[e.seq].isEmpty()&&delete this._messageVersions[e.seq]));const t=parseInt(e.head.replace.split(":")[1]);if(t>e.seq)return;const s=this.findMessage(t);if(s&&s.from!=e.from)return;const i=this._messageVersions[t]||new V((e,t)=>e.seq-t.seq,!0);i.put(e),this._messageVersions[t]=i}_routeData(e){e.content&&(!this.touched||this.touchedthis._maxSeq&&(this._maxSeq=e.seq,this.msgStatus(e,!0),clearTimeout(this._recvNotificationTimer),this._recvNotificationTimer=setTimeout(e=>{this._recvNotificationTimer=null,this.noteRecv(this._maxSeq)},100)),(e.seq(t=Math.max(t,e.mrrid),{mrrid:e.mrrid,val:e.val,count:0|e.count,users:Array.isArray(e.users)?e.users.slice():[]})),this.mrrid0&&this._processMetaSubs(e.sub),e.del&&this._processDelMessages(e.del.clear,e.del.delseq),e.tags&&this._processMetaTags(e.tags),e.cred&&this._processMetaCreds(e.cred),e.aux&&this._processMetaAux(e.aux),e.react&&this._processMetaReact(e.react),this.onMeta&&this.onMeta(e)}_routePres(e){let t,s;switch(e.what){case"del":this._processDelMessages(e.clear,e.delseq);break;case"on":case"off":t=this._users[e.src],t?t.online="on"==e.what:this._tinode.logger("WARNING: Presence update for an unknown user",this.name,e.src);break;case"term":this._resetSub();break;case"upd":e.src&&!this._tinode.isTopicCached(e.src)&&this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());break;case"aux":this.getMeta(this.startMetaQuery().withAux().build());break;case"react":this._processMetaReact(void 0,{mrrid:0|e.id2,seq:0|e.seq,user:e.act,val:e.val});break;case"acs":if(s=e.src||this._tinode.getCurrentUserID(),t=this._users[s],t)t.acs.updateAll(e.dacs),this._processMetaSubs([{user:s,updated:new Date,acs:t.acs}]);else{const i=(new r).updateAll(e.dacs);i&&i.mode!=r._NONE&&(t=this._cacheGetUser(s),t?t.acs=i:(t={user:s,acs:i},this.getMeta(this.startMetaQuery().withOneSub(void 0,s).build())),t.updated=new Date,this._processMetaSubs([t]))}break;default:this._tinode.logger("INFO: Ignored presence update",e.what)}this.onPres&&this.onPres(e)}_routeInfo(e){switch(e.what){case"recv":case"read":const t=this._users[e.from];t&&(t[e.what]=e.seq,t.recve.users.includes(i)):-1;if(r>=0){const e=s[r];if(t.val==p||e.val==t.val)if(e.count--,e.mrrid=Math.max(e.mrrid,t.mrrid),e.count<=0)s.splice(r,1);else{const t=e.users.indexOf(i);e.users.splice(t,1)}else{const n=e.users.indexOf(i);e.users.splice(n,1),e.count--,e.count<=0&&s.splice(r,1);const a=s.findIndex(e=>e.val==t.val);a>=0?(s[a].users.push(i),s[a].count++,s[a].mrrid=Math.max(s[a].mrrid,t.mrrid)):s.push({mrrid:t.mrrid,users:[i],count:1,val:t.val})}}else if(t.val!=p){const e=s.findIndex(e=>e.val==t.val);e>=0?(i&&s[e].users.push(i),s[e].count++,s[e].mrrid=Math.max(s[e].mrrid,t.mrrid)):s.push({mrrid:t.mrrid,users:i?[i]:[],count:1,val:t.val})}return s}_processMetaReact(e,t){if(!Array.isArray(e)){if(!t.seq||!t.val)return void this._tinode.logger("WARNING: invalid reaction");e=[{_diff:!0,seq:t.seq,data:[{mrrid:t.mrrid,val:t.val,count:1,users:[t.user||this._tinode.getCurrentUserID()]}]}]}const s=[];e.forEach(e=>{const t=this.findMessage(e.seq);if(s.push(e.seq),t){let s;s=e._diff?this._handleReactionDiff(t,e.data[0]):(e.data||[]).map(e=>({mrrid:e.mrrid,val:e.val,count:0|e.count,users:Array.isArray(e.users)?e.users.slice():[]})),t.react=s;const i=s.reduce((e,t)=>Math.max(e,t.mrrid),0);this.mrrid{e.hi?(s+=e.hi-e.low,this.flushMessageRange(e.low,e.hi)):(s++,this.flushMessage(e.low)),this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})}),this._tinode._db.addDelLog(this.name,e,t)),s>0&&this.onData&&this.onData()}_allMessagesReceived(e){this.onAllMessagesReceived&&this.onAllMessagesReceived(e)}_resetSub(){this._attached=!1}_gone(){this._messages.reset(),this._tinode._db.remMessages(this.name),this._users={},this.acs=new r(null),this.private=null,this.public=null,this.trusted=null,this._maxSeq=0,this._minSeq=0,this._maxDel=0,this._maxReact=0,this._attached=!1;const e=this._tinode.getMeTopic();e&&e._routePres({_noForwarding:!0,what:"gone",topic:h,src:this.name}),this.onDeleteTopic&&this.onDeleteTopic()}_updateCachedUser(e,t){let s=this._cacheGetUser(e);return s=v(s||{},t),this._cachePutUser(e,s),y(this._users,e,s)}_getQueuedSeqId(){return this._queuedSeqId++}_loadMessages(e,t){(t=t||{}).limit=t.limit||24;let s=0;return e.readMessages(this.name,t).then(e=>{e.forEach(e=>{e.seq>this._maxSeq&&(this._maxSeq=e.seq),(e.seqe.readDelLog(this.name,t)).then(e=>e.forEach(e=>{this._messages.put({seq:e.low,low:e.low,hi:e.hi,_deleted:!0})})).then(e=>s)}_updateReceived(e,t){this.touched=new Date,this.seq=0|e,t&&!this._tinode.isMe(t)||(this.read=this.read?Math.max(this.read,this.seq):this.seq,this.recv=this.recv?Math.max(this.read,this.recv):this.read),this.unread=this.seq-(0|this.read),this._tinode._db.updTopic(this)}}class G extends W{_contacts={};constructor(e){super(l,e)}_processMetaSubs(e){let t=Object.getOwnPropertyNames(this._contacts).length;this._contacts={};for(let s in e){let i=e[s];const r=i.topic?i.topic:i.user;i=y(this._contacts,r,i),t++,this.onMetaSub&&this.onMetaSub(i)}t>0&&this.onSubsUpdated&&this.onSubsUpdated(Object.keys(this._contacts))}publish(){return Promise.reject(new Error("Publishing to 'fnd' is not supported"))}setMeta(e){return Object.getPrototypeOf(G.prototype).setMeta.call(this,e).then(e=>{Object.keys(this._contacts).length>0&&(this._contacts={},this.onSubsUpdated&&this.onSubsUpdated([]))})}checkTagUniqueness(e,t){return new Promise((s,i)=>{this.subscribe().then(t=>this.setMeta({desc:{public:e}})).then(e=>this.getMeta(this.startMetaQuery().withTags().build())).then(e=>{e&&Array.isArray(e.tags)&&0!=e.tags.length||s(!0);const i=e.tags.filter(e=>e!==t);s(0==i.length)}).catch(e=>{i(e)})})}contacts(e,t){const s=e||this.onMetaSub;if(s)for(let e in this._contacts)s.call(t,this._contacts[e],e,this._contacts)}}class F extends W{onContactUpdate;constructor(e){super(h,e),e&&(this.onContactUpdate=e.onContactUpdate)}_processMetaDesc(e){const t=e.acs&&!e.acs.isPresencer()&&this.acs&&this.acs.isPresencer();v(this,e),this._tinode._db.updTopic(this),this._updateCachedUser(this._tinode._myUID,e),t&&this._tinode.mapTopics(e=>{e.online&&(e.online=!1,e.seen=Object.assign(e.seen||{},{when:new Date}),this._refreshContact("off",e))}),this.onMetaDesc&&this.onMetaDesc(this)}_processMetaSubs(e){let t=0;if(e.forEach(e=>{const s=e.topic;if(s==l||s==h)return;e.online=!!e.online;let i=null;if(e.deleted)i=e,this._tinode.cacheRemTopic(s),this._tinode._db.remTopic(s);else{void 0!==e.seq&&(e.seq=0|e.seq,e.recv=0|e.recv,e.read=0|e.read,e.unread=e.seq-e.read);const t=this._tinode.getTopic(s);t._new&&delete t._new,i=v(t,e),this._tinode._db.updTopic(i),W.isP2PTopicName(s)&&(this._cachePutUser(s,i),this._tinode._db.updUser(s,i.public)),!e._noForwarding&&t&&(e._noForwarding=!0,t._processMetaDesc(e))}t++,this.onMetaSub&&this.onMetaSub(i)}),this.onSubsUpdated&&t>0){const s=[];e.forEach(e=>{s.push(e.topic)}),this.onSubsUpdated(s,t)}}_processMetaCreds(e,t){1==e.length&&e[0]==p&&(e=[]),t?e.forEach(e=>{if(e.val){let t=this._credentials.findIndex(t=>t.meth==e.meth&&t.val==e.val);t<0?(e.done||(t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done),t>=0&&this._credentials.splice(t,1)),this._credentials.push(e)):this._credentials[t].done=e.done}else if(e.resp){const t=this._credentials.findIndex(t=>t.meth==e.meth&&!t.done);t>=0&&(this._credentials[t].done=!0)}}):this._credentials=e,this.onCredsUpdated&&this.onCredsUpdated(this._credentials)}_routePres(e){if("term"==e.what)return void this._resetSub();if("upd"==e.what&&e.src==h)return void this.getMeta(this.startMetaQuery().withDesc().build());const t=this._tinode.cacheGetTopic(e.src);if(t){switch(e.what){case"on":t.online=!0;break;case"off":t.online&&(t.online=!1,t.seen=Object.assign(t.seen||{},{when:new Date}));break;case"msg":t._updateReceived(e.seq,e.act);break;case"upd":this.getMeta(this.startMetaQuery().withLaterOneSub(e.src).build());break;case"acs":e.tgt||(t.acs?t.acs.updateAll(e.dacs):t.acs=(new r).updateAll(e.dacs),t.touched=new Date);break;case"ua":t.seen={when:new Date,ua:e.val};break;case"recv":e.seq=0|e.seq,t.recv=t.recv?Math.max(t.recv,e.seq):e.seq;break;case"read":e.seq=0|e.seq,t.read=t.read?Math.max(t.read,e.seq):e.seq,t.recv=t.recv?Math.max(t.read,t.recv):t.recv,t.unread=t.seq-t.read;break;case"gone":this._tinode.cacheRemTopic(e.src),t._deleted?this._tinode._db.remTopic(e.src):(t._deleted=!0,t._attached=!1,this._tinode._db.markTopicAsDeleted(e.src,!0));break;case"del":break;case"react":t._processMetaReact(void 0,{mrrid:0|e.id2,seq:e.seq,user:e.actor,val:e.val});break;default:this._tinode.logger("INFO: Unsupported presence update in 'me'",e.what)}this._refreshContact(e.what,t)}else{if("acs"==e.what){const t=new r(e.dacs);if(!t||t.mode==r._INVALID)return void this._tinode.logger("ERROR: Invalid access mode update",e.src,e.dacs);if(t.mode==r._NONE)return void this._tinode.logger("WARNING: Removing non-existent subscription",e.src,e.dacs);{this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const s=this._tinode.getTopic(e.src);s.topic=e.src,s.online=!1,s.acs=t,this._tinode._db.updTopic(s)}}else if("tags"==e.what)this.getMeta(this.startMetaQuery().withTags().build());else if("msg"==e.what){this.getMeta(this.startMetaQuery().withOneSub(void 0,e.src).build());const t=this._tinode.getTopic(e.src);t._deleted=!1,this._tinode._db.updTopic(t)}this._refreshContact(e.what,t)}this.onPres&&this.onPres(e)}_refreshContact(e,t){this.onContactUpdate&&this.onContactUpdate(e,t)}publish(){return Promise.reject(new Error("Publishing to 'me' is not supported"))}delCredential(e,t){return this._attached?this._tinode.delCredential(e,t).then(s=>{const i=this._credentials.findIndex(s=>s.meth==e&&s.val==t);return i>-1&&this._credentials.splice(i,1),this.onCredsUpdated&&this.onCredsUpdated(this._credentials),s}):Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"))}contacts(e,t,s){this._tinode.mapTopics((i,r)=>{!i.isCommType()||t&&!t(i)||e.call(s,i,r)})}getContact(e){return this._tinode.cacheGetTopic(e)}getAccessMode(e){if(e){const t=this._tinode.cacheGetTopic(e);return t?t.acs:null}return this.acs}isArchived(e){const t=this._tinode.cacheGetTopic(e);return t&&t.private&&!!t.private.arch}getCredentials(){return this._credentials}pinTopic(e,t){if(!this._attached)return Promise.reject(new Error("Cannot pin topic in inactive 'me' topic"));if(!W.isCommTopicName(e))return Promise.reject(new Error("Invalid topic to pin"));const s=Array.isArray(this.private&&this.private.tpin)?this.private.tpin:[],i=s.includes(e);return t&&i||!t&&!i?Promise.resolve(s):(t?s.unshift(e):s.splice(s.indexOf(e),1),this.setMeta({desc:{private:{tpin:s.length>0?s:p}}}))}pinnedTopicRank(e){if(!this.private||!this.private.tpin)return 0;const t=this.private.tpin.indexOf(e);return t<0?0:this.private.tpin.length-t}}const z="text/x-the-card";class ${constructor(e,t,s,i){Object.assign(this,function(e,t,s,i){let r=null;if((e=e&&e.trim())&&(r={fn:e}),"string"==typeof(i=i&&i.trim())&&(r=r||{},r.note=i||p),t){r=r||{};let e=s;const i=/^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);i?(e=i[1],r.photo={data:t.substring(t.indexOf(",")+1),ref:p}):r.photo={data:p,ref:t},r.photo.type=(e||"image/jpeg").substring(6)}return r}(e,t,s,i)||{})}merge(e){Object.assign(this,e)}get contentType(){return z}get size(){return JSON.stringify(this).length}}function B(e,t,s,i,r){return t=t&&t.trim(),s=s&&s.trim(),t&&s&&((e=e||{}).comm=e.comm||[],r&&(e.comm=e.comm.filter(e=>e.proto!=t||!e.des.includes(i))),e.comm.push({proto:t,des:[i],value:s})),e}function K(e,t,s,i){return e&&Array.isArray(e.comm)&&(e.comm=e.comm.filter(e=>e.proto!=t||!(!s||e.value==s)||!!i&&!e.des.includes(i))),e}let H,Q,X;function J(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return String.fromCharCode("0x"+t)}))}function Y(e,t){return"string"==typeof t&&t.length>128?"<"+t.length+", bytes: "+t.substring(0,12)+"..."+t.substring(t.length-12)+">":function(e,t){if(t instanceof Date)t=function(e){if(!w(e))return;const t=function(e,t){return"0".repeat((t=t||2)-(""+e).length)+e},s=e.getUTCMilliseconds();return e.getUTCFullYear()+"-"+t(e.getUTCMonth()+1)+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+(s?"."+t(s,3):"")+"Z"}(t);else if(t instanceof r)t=t.jsonHelper();else if(null==t||!1===t||Array.isArray(t)&&0==t.length||"object"==typeof t&&0==Object.keys(t).length)return;return t}(0,t)}$.contentType=z,$.setFn=function(e,t){return t=t&&t.trim(),(e=e||{}).fn=t||void 0,e},$.getFn=function(e){return e&&e.fn?e.fn:null},$.setNote=function(e,t){return t=t&&t.trim(),(e=e||{}).note=t||p,e},$.setPhoto=function(e,t,s){if(t){e=e||{};let i=s;const r=/^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(t);if(r)i=r[1],e.photo={data:t.substring(t.indexOf(",")+1),ref:p};else if(e.photo={data:p,ref:t},!i){const e=/\.([a-z0-9]+)$/i.exec(t);e&&(i={jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",bmp:"image/bmp",webp:"image/webp",svg:"image/svg+xml"}[e[1].toLowerCase()]||null)}e.photo.type=(i||"image/jpeg").substring(6)}else(e=e||{}).photo=p;return e},$.getPhotoUrl=function(e){if(e&&e.photo){if(e.photo.ref&&e.photo.ref!=p)return e.photo.ref;if(e.photo.data&&e.photo.data!=p)return"data:image/"+(e.photo.type||"jpeg")+";base64,"+e.photo.data}return null},$.getOrg=function(e){return e&&e.org&&e.org.fn||null},$.setPhone=function(e,t,s="voice"){return B(e,"tel",t,s,!0)},$.setEmail=function(e,t,s="home"){return B(e,"email",t,s,!0)},$.setTinodeID=function(e,t,s="home"){return B(e,"tinode",t,s,!0)},$.addPhone=function(e,t,s="voice"){return B(e,"tel",t,s,!1)},$.addEmail=function(e,t,s="home"){return B(e,"email",t,s,!1)},$.addTinodeID=function(e,t,s="home"){return B(e,"tinode",t,s,!1)},$.clearPhone=function(e,t,s){return K(e,"tel",t,s)},$.clearEmail=function(e,t,s){return K(e,"email",t,s)},$.clearTinodeID=function(e,t,s){return K(e,"tinode",t,s)},$.getComm=function(e,t){return e&&Array.isArray(e.comm)?e.comm.filter(e=>e.proto==t):[]},$.getEmails=function(e){return $.getComm(e,"email").map(e=>e.value)},$.getPhones=function(e){return $.getComm(e,"tel").map(e=>e.value)},$.getFirstTinodeID=function(e){const t=$.getComm(e,"tinode");return t.length>0?t[0].value:null},$.exportVCard=function(e){if(!e)return null;let t="BEGIN:VCARD\r\nVERSION:3.0\r\n";if(e.fn&&(t+=`FN:${e.fn}\r\n`),e.n&&(t+=`N:${e.n.surname||""};${e.n.given||""};${e.n.additional||""};${e.n.prefix||""};${e.n.suffix||""}\r\n`),e.org&&(e.org.fn&&(t+=`ORG:${e.org.fn}\r\n`),e.org.title&&(t+=`TITLE:${e.org.title}\r\n`)),e.note&&e.note!=p&&(t+=`NOTE:${e.note}\r\n`),e.bday&&e.bday.m&&e.bday.d){const s=e.bday.y?String(e.bday.y).padStart(4,"0"):"--",i=String(e.bday.m).padStart(2,"0"),r=String(e.bday.d).padStart(2,"0");t+=`BDAY:${s}-${i}-${r}\r\n`}return e.photo&&(e.photo.ref&&e.photo.ref!=p?t+=`PHOTO;VALUE=URI:${e.photo.ref}\r\n`:e.photo.data&&e.photo.data!=p&&(t+=`PHOTO;TYPE=${e.photo.type.toUpperCase()};ENCODING=b:${e.photo.data}\r\n`)),Array.isArray(e.comm)&&e.comm.forEach(e=>{const s=e.des.join(",").toUpperCase();"tel"===e.proto?t+=`TEL;TYPE=${s}:${e.value}\r\n`:"email"===e.proto?t+=`EMAIL;TYPE=${s}:${e.value}\r\n`:"tinode"===e.proto?t+=`IMPP;TYPE=${s}:${e.value}\r\n`:"http"===e.proto&&(t+=`URL;TYPE=${s}:${e.value}\r\n`)}),t+="END:VCARD\r\n",t},$.importVCard=function(e){if(!e||"string"!=typeof e)return null;const t=e.split(/\r\n|\n/),s=[];let i="";for(let e=0;ee.replace(/\\([,;\\n])/g,(e,t)=>"n"===t?"\n":t),o=e=>{const t=[];let s=0;for(;sString.fromCharCode(parseInt(t,16)))}};return s.forEach(e=>{const[t,...s]=e.split(":");if(!t||0===s.length)return;const i=s.join(":"),c=t.split(";"),h=c[0].trim().toUpperCase(),l=c.some(e=>"QUOTED-PRINTABLE"===e.trim().toUpperCase()||"ENCODING=QUOTED-PRINTABLE"===e.trim().toUpperCase());if("FN"===h){let e=i;l&&(e=o(e)),r.fn=a(e)}else if("N"===h){let e=i;l&&(e=o(e));const t=e.split(";");r.n={surname:t[0]?a(t[0]):void 0,given:t[1]?a(t[1]):void 0,additional:t[2]?a(t[2]):void 0,prefix:t[3]?a(t[3]):void 0,suffix:t[4]?a(t[4]):void 0},Object.keys(r.n).forEach(e=>void 0===r.n[e]&&delete r.n[e]),0===Object.keys(r.n).length&&delete r.n}else if("ORG"===h){let e=i;l&&(e=o(e));const t=e.split(";");r.org=r.org||{},r.org.fn=t[0]?a(t[0]):void 0,r.org.fn||delete r.org.fn}else if("TITLE"===h){let e=i;l&&(e=o(e)),r.org=r.org||{},r.org.title=e?a(e):void 0,r.org.title||delete r.org.title}else if("NOTE"===h){let e=i;l&&(e=o(e)),r.note=a(e)}else if("BDAY"===h){let e=i.split(/[T ]/)[0].trim(),t=null,s=null,n=null;const a=e.replace(/-/g,"");if(6===a.length&&/^\d{6}$/.test(a)){const e=parseInt(a.substring(0,2),10);s=parseInt(a.substring(2,4),10),n=parseInt(a.substring(4,6),10),t=e>=35?1900+e:2e3+e}else if(e.startsWith("--")||e.startsWith("----")){const t=e.replace(/^-+/,"");if(4===t.length&&/^\d{4}$/.test(t))s=parseInt(t.substring(0,2),10),n=parseInt(t.substring(2,4),10);else if(t.includes("-")){const e=t.split("-");e.length>=2&&(s=parseInt(e[0],10),n=parseInt(e[1],10))}}else if(8===a.length&&/^\d{8}$/.test(a))t=parseInt(a.substring(0,4),10),s=parseInt(a.substring(4,6),10),n=parseInt(a.substring(6,8),10);else if(e.includes("-")){const i=e.split("-");i[0]&&""!==i[0]&&!/^-+$/.test(i[0])&&(t=parseInt(i[0],10)),i.length>=2&&(s=parseInt(i[1],10)),i.length>=3&&(n=parseInt(i[2],10))}s&&s>=1&&s<=12&&n&&n>=1&&n<=31&&(!t||t>=1800&&t<=2200)&&(r.bday={m:s,d:n},t&&(r.bday.y=t))}else if("PHOTO"===h){const e=t.split(";").slice(1);let s="jpeg",n=null;e.forEach(e=>{const[t,i]=e.split("=");t&&"TYPE"===t.trim().toUpperCase()?s=i?i.trim().toLowerCase():"jpeg":t&&"ENCODING"===t.trim().toUpperCase()&&(n=i?i.trim().toLowerCase():null)}),r.photo="b"===n?{type:s,data:i,ref:p}:{type:s,data:p,ref:i}}else if("TEL"===h){const e=t.split(";").filter(e=>e.trim().toUpperCase().startsWith("TYPE=")).flatMap(e=>{const t=e.indexOf("=");return e.substring(t+1).split(",").map(e=>{const t=e.trim().toLowerCase();return t.startsWith("type=")?t.substring(5):t})}).filter(e=>"internet"!==e),s=`tel|${i}`;n.has(s)||n.set(s,new Set),e.forEach(e=>n.get(s).add(e))}else if("EMAIL"===h){const e=t.split(";").filter(e=>e.trim().toUpperCase().startsWith("TYPE=")).flatMap(e=>{const t=e.indexOf("=");return e.substring(t+1).split(",").map(e=>{const t=e.trim().toLowerCase();return t.startsWith("type=")?t.substring(5):t})}).filter(e=>"internet"!==e),s=`email|${i}`;n.has(s)||n.set(s,new Set),e.forEach(e=>n.get(s).add(e))}else if("IMPP"===h){const e=t.split(";").filter(e=>e.trim().toUpperCase().startsWith("TYPE=")).flatMap(e=>{const t=e.indexOf("=");return e.substring(t+1).split(",").map(e=>{const t=e.trim().toLowerCase();return t.startsWith("type=")?t.substring(5):t})}).filter(e=>"internet"!==e),s=i.startsWith("tinode:")?`tinode|${i}`:`impp|${i}`;n.has(s)||n.set(s,new Set),e.forEach(e=>n.get(s).add(e))}else if("URL"===h){const e=t.split(";").filter(e=>e.trim().toUpperCase().startsWith("TYPE=")).flatMap(e=>{const t=e.indexOf("=");return e.substring(t+1).split(",").map(e=>{const t=e.trim().toLowerCase();return t.startsWith("type=")?t.substring(5):t})}).filter(e=>"internet"!==e),s=`http|${i}`;n.has(s)||n.set(s,new Set),e.forEach(e=>n.get(s).add(e))}}),n.size>0&&(r.comm=[],n.forEach((e,t)=>{const[s,i]=t.split("|",2);r.comm.push({proto:s,des:Array.from(e),value:i})})),r},$.isFileSupported=function(e,t){return"text/vcard"==e||(t||"").endsWith(".vcf")||(t||"").endsWith(".vcard")},"undefined"!=typeof WebSocket&&(H=WebSocket),"undefined"!=typeof XMLHttpRequest&&(Q=XMLHttpRequest),"undefined"!=typeof indexedDB&&(X=indexedDB),function(){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";"undefined"==typeof btoa&&(s.g.btoa=function(t=""){let s=t,i="";for(let t,r=0,n=0,a=e;s.charAt(0|n)||(a="=",n%1);i+=a.charAt(63&r>>8-n%1*8)){if(t=s.charCodeAt(n+=3/4),t>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|t}return i}),"undefined"==typeof atob&&(s.g.atob=function(t=""){let s=t.replace(/=+$/,""),i="";if(s.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let t,r=0,n=0,a=0;t=s.charAt(a++);~t&&(n=r%4?64*n+t:t,r++%4)?i+=String.fromCharCode(255&n>>(-2*r&6)):0)t=e.indexOf(t);return i}),"undefined"==typeof window&&(s.g.window={WebSocket:H,XMLHttpRequest:Q,indexedDB:X,URL:{createObjectURL:function(){throw new Error("Unable to use URL.createObjectURL in a non-browser application")}}}),I.setNetworkProviders(H,Q),j.setNetworkProvider(Q),k.setDatabaseProvider(X)}();class Z{_host;_secure;_appName;_apiKey;_browser="";_platform;_hwos="undefined";_humanLanguage="xx";_loggingEnabled=!1;_trimLongStrings=!1;_myUID=null;_authenticated=!1;_login=null;_authToken=null;_inPacketCount=0;_messageId=Math.floor(65535*Math.random()+65535);_serverInfo=null;_deviceToken=null;_pendingPromises={};_expirePromises=null;_connection=null;_persist=!1;_db=null;_cache={};constructor(e,t){if(this._host=e.host,this._secure=e.secure,this._appName=e.appName||"Undefined",this._apiKey=e.apiKey,this._platform=e.platform||"web","undefined"!=typeof navigator&&(this._browser=function(e,t){e=e||"";let s,i="";/reactnative/i.test(t)&&(i="ReactNative; ");let r=(e=e.replace(" (KHTML, like Gecko)","")).match(/(AppleWebKit\/[.\d]+)/i);if(r){const t=["edg","chrome","safari","mobile","version"];let i,n=e.substr(r.index+r[0].length).split(" "),a=[];for(let e=0;es[1].toLowerCase().startsWith(e))]),"Version"==s[1]&&(i=s[2]))}a.sort((e,t)=>e[2]-t[2]),a.length>0?(a[0][0].toLowerCase().startsWith("edg")?a[0][0]="Edge":"OPR"==a[0][0]?a[0][0]="Opera":"Safari"==a[0][0]&&i&&(a[0][1]=i),s=a[0][0]+"/"+a[0][1]):s=r[1]}else/firefox/i.test(e)?(r=/Firefox\/([.\d]+)/g.exec(e),s=r?"Firefox/"+r[1]:"Firefox/?"):(r=/([\w.]+)\/([.\d]+)/.exec(e),r?s=r[1]+"/"+r[2]:(r=e.split(" "),s=r[0]));if(r=s.split("/"),r.length>1){const e=r[1].split("."),t=e[1]?"."+e[1].substr(0,2):"";s=`${r[0]}/${e[0]}${t}`}return i+s}(navigator.userAgent,navigator.product),this._hwos=navigator.platform,this._humanLanguage=navigator.language||"en-US"),I.logger=this.logger,q().logger=this.logger,"lp"!=e.transport&&"ws"!=e.transport&&(e.transport=function(){if("object"==typeof window){if(window.WebSocket)return"ws";if(window.XMLHttpRequest)return"lp"}return null}()),this._connection=new I(e,"0",!0),this._connection.onMessage=e=>{this.#S(e)},this._connection.onOpen=e=>this.#E(),this._connection.onDisconnect=(e,t)=>this.#A(e,t),this._connection.onAutoreconnectIteration=(e,t)=>{this.onAutoreconnectIteration&&this.onAutoreconnectIteration(e,t)},this._persist=e.persist,this._db=new k(this.logger,this.logger),this._persist){const e=[];this._db.initDatabase().then(t=>this._db.mapTopics(t=>{let s=this.#R("topic",t.name);s||(s=t.name==h?new F:t.name==l?new G:new W(t.name),this._db.deserializeTopic(s,t),this.#D(s),s._cachePutSelf(),this._db.maxDelId(s.name).then(e=>{s._maxDel=Math.max(s._maxDel,e||0)}),delete s._new,e.push(s._loadMessages(this._db)))})).then(e=>this._db.mapUsers(e=>{this.#I("user",e.uid,v({},e.public))})).then(t=>Promise.all(e)).then(e=>{t&&t(),this.logger("Persistent cache initialized.")}).catch(e=>{t&&t(e),this.logger("Failed to initialize persistent cache:",e)})}else this._db.deleteDatabase().then(e=>{t&&t()})}logger(e,...t){if(this._loggingEnabled){const s=new Date,i=("0"+s.getUTCHours()).slice(-2)+":"+("0"+s.getUTCMinutes()).slice(-2)+":"+("0"+s.getUTCSeconds()).slice(-2)+"."+("00"+s.getUTCMilliseconds()).slice(-3);console.log("["+i+"]",e,t.join(" "))}}#N(e){let t=null;return e&&(t=new Promise((t,s)=>{this._pendingPromises[e]={resolve:t,reject:s,ts:new Date}})),t}#C(e,t,s,i){const r=this._pendingPromises[e];r&&(delete this._pendingPromises[e],t>=200&&t<400?r.resolve&&r.resolve(s):r.reject&&r.reject(new f(i,t)))}#k(e,t){let s;t&&(s=this.#N(t)),e=M(e);let i=JSON.stringify(e);this.logger("out: "+(this._trimLongStrings?JSON.stringify(e,Y):i));try{this._connection.sendText(i)}catch(e){if(!t)throw e;this.#C(t,I.NETWORK_ERROR,null,e.message)}return s}#S(e){if(!e)return;if(this._inPacketCount++,this.onRawMessage&&this.onRawMessage(e),"0"===e)return void(this.onNetworkProbe&&this.onNetworkProbe());let t=JSON.parse(e,_);t?(this.logger("in: "+(this._trimLongStrings?JSON.stringify(t,Y):e)),this.onMessage&&this.onMessage(t),t.ctrl?(this.onCtrlMessage&&this.onCtrlMessage(t.ctrl),t.ctrl.id&&this.#C(t.ctrl.id,t.ctrl.code,t.ctrl,t.ctrl.text),setTimeout(e=>{if(205==t.ctrl.code&&"evicted"==t.ctrl.text){const e=this.#R("topic",t.ctrl.topic);e&&(e._resetSub(),t.ctrl.params&&t.ctrl.params.unsub&&e._gone())}else if(t.ctrl.code<300&&t.ctrl.params)if("data"==t.ctrl.params.what){const e=this.#R("topic",t.ctrl.topic);e&&e._allMessagesReceived(t.ctrl.params.count)}else if("sub"==t.ctrl.params.what){const e=this.#R("topic",t.ctrl.topic);e&&e._processMetaSubs([])}},0)):setTimeout(e=>{if(t.meta){const e=this.#R("topic",t.meta.topic);e&&e._routeMeta(t.meta),t.meta.id&&this.#C(t.meta.id,200,t.meta,"META"),this.onMetaMessage&&this.onMetaMessage(t.meta)}else if(t.data){const e=this.#R("topic",t.data.topic);e&&e._routeData(t.data),this.onDataMessage&&this.onDataMessage(t.data)}else if(t.pres){const e=this.#R("topic",t.pres.topic);e&&e._routePres(t.pres),this.onPresMessage&&this.onPresMessage(t.pres)}else if(t.info){const e=this.#R("topic",t.info.topic);e&&e._routeInfo(t.info),this.onInfoMessage&&this.onInfoMessage(t.info)}else this.logger("ERROR: Unknown packet received.")},0)):(this.logger("in: "+e),this.logger("ERROR: failed to parse data"))}#E(){this._expirePromises||(this._expirePromises=setInterval(e=>{const t=new f("timeout",504),s=new Date((new Date).getTime()-5e3);for(let e in this._pendingPromises){let i=this._pendingPromises[e];i&&i.ts{e._resetSub()});for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#q(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+a}#U(e,t){switch(e){case"hi":return{hi:{id:this.getNextUniqueId(),ver:n,ua:this.#q(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:t,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:t,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:t,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:t,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:t,desc:{},sub:{},tags:[],aux:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:t,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:t,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#I(e,t,s){this._cache[e+":"+t]=s}#R(e,t){return this._cache[e+":"+t]}#j(e,t){delete this._cache[e+":"+t]}#O(e,t,s){const i=e?e+":":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#D(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#R("user",e);if(t)return{user:e,public:v({},t)}},e._cachePutUser=(e,t)=>{this.#I("user",e,v({},t.public))},e._cacheDelUser=e=>{this.#j("user",e)},e._cachePutSelf=t=>{this.#I("topic",e.name,e)},e._cacheDelSelf=t=>{this.#j("topic",e.name)}}#L(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return"object"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return W.topicType(e)}static isMeTopicName(e){return W.isMeTopicName(e)}static isSelfTopicName(e){return W.isSelfTopicName(e)}static isGroupTopicName(e){return W.isGroupTopicName(e)}static isP2PTopicName(e){return W.isP2PTopicName(e)}static isCommTopicName(e){return W.isCommTopicName(e)}static isNewGroupTopicName(e){return W.isNewGroupTopicName(e)}static isChannelTopicName(e){return W.isChannelTopicName(e)}static getVersion(){return n}static setNetworkProviders(e,t){H=e,Q=t,I.setNetworkProviders(H,Q),j.setNetworkProvider(Q)}static setDatabaseProvider(e){X=e,k.setDatabaseProvider(X)}static getLibrary(){return a}static isNullValue(e){return e===p}static isServerAssignedSeq(e){return e>0&&e3&&e.length<24&&/^[a-z0-9][a-z0-9_\-]{3,23}$/i.test(e)}static tagSplit(e){if(!e)return null;const t=(e=e.trim()).indexOf(":");if(t<=0)return null;const s=e.substring(t+1);return s?{prefix:e.substring(0,t),value:s}:null}static setUniqueTag(e,t){if(!e||0==e.length)return[t];const s=Z.tagSplit(t);return s?((e=e.filter(e=>e&&!e.startsWith(s.prefix))).push(t),e):e}static clearTagPrefix(e,t){return e&&0!=e.length?e.filter(e=>e&&!e.startsWith(t)):[]}static tagByPrefix(e,t){if(e)return e.find(e=>e&&e.startsWith(t))}getNextUniqueId(){return 0!=this._messageId?""+this._messageId++:void 0}connect(e){return this._connection.connect(e)}reconnect(e){this._connection.reconnect(e)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(e){if("string"!=typeof e)return e;if(b(e)){const t="scheme://host/",s=new URL(e,t);this._apiKey&&s.searchParams.append("apikey",this._apiKey),this._authToken&&this._authToken.token&&(s.searchParams.append("auth","token"),s.searchParams.append("secret",this._authToken.token)),e=s.toString().substring(t.length-1)}return e}account(e,t,s,i,r){const n=this.#U("acc");return n.acc.user=e,n.acc.scheme=t,n.acc.secret=s,n.acc.login=i,r&&(n.acc.desc.defacs=r.defacs,n.acc.desc.public=r.public,n.acc.desc.private=r.private,n.acc.desc.trusted=r.trusted,n.acc.tags=r.tags,n.acc.cred=r.cred,n.acc.tmpscheme=r.scheme,n.acc.tmpsecret=r.secret,Array.isArray(r.attachments)&&r.attachments.length>0&&(n.extra={attachments:r.attachments.filter(e=>b(e))})),this.#k(n,n.acc.id)}createAccount(e,t,s,i){let r=this.account("new",e,t,s,i);return s&&(r=r.then(e=>this.#L(e))),r}createAccountBasic(e,t,s){return e=e||"",t=t||"",this.createAccount("basic",J(e+":"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||"",s=s||"",this.account(e,"basic",J(t+":"+s),!1,i)}hello(){const e=this.#U("hi");return this.#k(e,e.hi.id).then(e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e)).catch(e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)})}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#k({hi:{dev:e||Z.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#U("login");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#k(i,i.login.id).then(e=>this.#L(e))}loginBasic(e,t,s){return this.login("basic",J(e+":"+t),s).then(t=>(this._login=e,t))}loginToken(e,t){return this.login("token",e,t)}requestResetAuthSecret(e,t,s){return this.login("reset",J(e+":"+t+":"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#U("sub",e);if(e||(e=o),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;Z.isNewGroupTopicName(e)?i.sub.set.desc=t:Z.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter(e=>b(e))}),s.tags&&(i.sub.set.tags=s.tags),s.aux&&(i.sub.set.aux=s.aux)}return this.#k(i,i.sub.id)}leave(e,t){const s=this.#U("leave",e);return s.leave.unsub=t,this.#k(s,s.leave.id)}createMessage(e,t,s){const i=this.#U("pub",e);let r="string"==typeof t?q().parse(t):t;return r&&!q().isPlainText(r)&&(i.pub.head={mime:q().getContentType()},t=r),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter(e=>b(e))}),this.#k(s,e.id)}oobNotification(e){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(e,Y):e)),e.what){case"msg":if(!e.seq||e.seq<1||!e.topic)break;if(!this.isConnected())break;const t=this.#R("topic",e.topic);if(!t)break;if(t.isSubscribed())break;t.maxMsgSeq(){this.logger("Failed to get the name of a new sender",e)}),t.subscribe(null).then(e=>t.getMeta(new L(t).withLaterData(24).withLaterDel(24).build())).then(e=>{t.leaveDelayed(!1,1e3)}).catch(e=>{this.logger("On push data fetch failed",e)}).finally(e=>{this.getMeTopic()._refreshContact("msg",t)}));break;case"read":this.getMeTopic()._routePres({what:"read",seq:e.seq});break;case"sub":if(!this.isMe(e.xfrom))break;const s={given:e.modeGiven,want:e.modeWant},i=new r(s),n=i.mode&&i.mode!=r._NONE?{what:"acs",src:e.topic,dacs:s}:{what:"gone",src:e.topic};this.getMeTopic()._routePres(n);break;default:this.logger("Unknown push type ignored",e.what)}}getMeta(e,t){const s=this.#U("get",e);return s.get=v(s.get,t),this.#k(s,s.get.id)}setMeta(e,t){const s=this.#U("set",e),i=[];return t&&(["desc","sub","tags","cred","aux","react"].forEach(e=>{t.hasOwnProperty(e)&&(i.push(e),s.set[e]=t[e])}),Array.isArray(t.attachments)&&t.attachments.length>0&&(s.extra={attachments:t.attachments.filter(e=>b(e))})),0==i.length?Promise.reject(new Error("Invalid {set} parameters")):this.#k(s,s.set.id)}delMessages(e,t,s){const i=this.#U("del",e);return i.del.what="msg",i.del.delseq=t,i.del.hard=s,this.#k(i,i.del.id)}delTopic(e,t){const s=this.#U("del",e);return s.del.what="topic",s.del.hard=t,this.#k(s,s.del.id)}delSubscription(e,t){const s=this.#U("del",e);return s.del.what="sub",s.del.user=t,this.#k(s,s.del.id)}delCredential(e,t){const s=this.#U("del",h);return s.del.what="cred",s.del.cred={meth:e,val:t},this.#k(s,s.del.id)}delCurrentUser(e){const t=this.#U("del",null);return t.del.what="user",t.del.hard=e,this.#k(t,t.del.id).then(e=>{this._myUID=null})}note(e,t,s){if(s<=0||s>=u)throw new Error(`Invalid message id ${s}`);const i=this.#U("note",e);i.note.what=t,i.note.seq=s,this.#k(i)}noteKeyPress(e,t){const s=this.#U("note",e);s.note.what=t||"kp",this.#k(s)}videoCall(e,t,s,i){const r=this.#U("note",e);r.note.seq=t,r.note.what="call",r.note.event=s,r.note.payload=i,this.#k(r)}react(e,t,s){const i=this.#U("note",e);i.note.seq=t,i.note.what="react",i.note.payload={emo:s},this.#k(i)}getTopic(e){let t=this.#R("topic",e);return!t&&e&&(t=e==h?new F:e==l?new G:new W(e),this.#D(t),t._cachePutSelf()),t}cacheGetTopic(e){return this.#R("topic",e)}cacheRemTopic(e){this.#j("topic",e)}mapTopics(e,t){this.#O("topic",e,t)}isTopicCached(e){return!!this.#R("topic",e)}newGroupTopicName(e){return(e?c:o)+this.getNextUniqueId()}getMeTopic(){return this.getTopic(h)}getFndTopic(){return this.getTopic(l)}getLargeFileHelper(){return new j(this,"0")}getCurrentUserID(){return this._myUID}isMe(e){return this._myUID===e}getCurrentLogin(){return this._login}getServerInfo(){return this._serverInfo}report(e,t){return this.publish("sys",q().attachJSON(null,{action:e,target:t}))}getServerParam(e,t){return this._serverInfo&&this._serverInfo[e]||t}enableLogging(e,t){this._loggingEnabled=e,this._trimLongStrings=e&&t}setHumanLanguage(e){e&&(this._humanLanguage=e)}isTopicOnline(e){const t=this.#R("topic",e);return t&&t.online}getTopicAccessMode(e){const t=this.#R("topic",e);return t?t.acs:null}wantAkn(e){this._messageId=e?Math.floor(16777215*Math.random()+16777215):0}onWebsocketOpen=void 0;onConnect=void 0;onDisconnect=void 0;onLogin=void 0;onCtrlMessage=void 0;onDataMessage=void 0;onPresMessage=void 0;onMessage=void 0;onRawMessage=void 0;onNetworkProbe=void 0;onAutoreconnectIteration=void 0}return Z.MESSAGE_STATUS_NONE=0,Z.MESSAGE_STATUS_QUEUED=10,Z.MESSAGE_STATUS_SENDING=20,Z.MESSAGE_STATUS_FAILED=30,Z.MESSAGE_STATUS_FATAL=40,Z.MESSAGE_STATUS_SENT=50,Z.MESSAGE_STATUS_RECEIVED=60,Z.MESSAGE_STATUS_READ=70,Z.MESSAGE_STATUS_TO_ME=80,Z.DEL_CHAR=p,Z.MAX_MESSAGE_SIZE="maxMessageSize",Z.MAX_SUBSCRIBER_COUNT="maxSubscriberCount",Z.MIN_TAG_LENGTH="minTagLength",Z.MAX_TAG_LENGTH="maxTagLength",Z.MAX_TAG_COUNT="maxTagCount",Z.MAX_FILE_UPLOAD_SIZE="maxFileUploadSize",Z.REQ_CRED_VALIDATORS="reqCred",Z.MSG_DELETE_AGE="msgDelAge",Z.ICE_SERVERS="iceServers",Z.REACTION_LIST=m,Z.URI_TOPIC_ID_PREFIX="tinode:///id/",Z.URI_TOPIC_ALIAS_PREFIX="tinode:///alias/",Z.TAG_ALIAS=g,Z.TAG_EMAIL="email:",Z.TAG_PHONE="tel:",i}()}); \ No newline at end of file diff --git a/umd/tinode.prod.js.map b/umd/tinode.prod.js.map index a3cd21e6..81740c2a 100644 --- a/umd/tinode.prod.js.map +++ b/umd/tinode.prod.js.map @@ -1 +1 @@ -{"version":3,"file":"tinode.prod.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/drafty.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/access-mode.js","webpack://tinode/./version.js","webpack://tinode/./src/config.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/utils.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/tinode.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/me-topic.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, function() {\nreturn ","/**\n * @copyright 2015-2024 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

    Supports conversion of user keyboard input to formatted text:

    \n *
      \n *
    • *abc* → abc
    • \n *
    • _abc_ → abc
    • \n *
    • ~abc~ → abc
    • \n *
    • `abc` → abc
    • \n *
    \n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
    \n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
    \n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\n// Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr';\n// Legacy Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
    ',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Quoted block.\n QQ: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: (data) => {\n return data ? {} : null;\n },\n },\n // Video call\n VC: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: DRAFTY_FR_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup. DO NOT use in production code.\n *\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (!Drafty.isFormResponseType(entData.mime) && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n/**\n * Check if the given mime-type is a MIME type of drafty form response.\n * @memberof Drafty\n * @static\n *\n * @returns {boolean} true if given mime type is drafty form response, false otherwise.\n */\nDrafty.isFormResponseType = function(mimeType) {\n return mimeType === DRAFTY_FR_MIME_TYPE ||\n mimeType === DRAFTY_FR_MIME_TYPE_LEGACY;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (Drafty.isFormResponseType(c.data['mime'])) {\n // Form response attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.25.1\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2025 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.25';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n\n// Parameters of exponential backoff for reconnect attempts.\n// 2000 milliseconds, minimum delay between reconnects.\nexport const BACKOFF_BASE = 2_000;\n// Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes.\nexport const BACKOFF_MAX_ITER = 10;\n// Random jitter between reconnection attempts, 0.3 -> 30% jitter.\nexport const BACKOFF_JITTER = 0.3;\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return dst;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n console.warn(\"Error merging property:\", prop, err);\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval) {\n cache[key] = mergeObj(cache[key], newval);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n BACKOFF_BASE,\n BACKOFF_MAX_ITER,\n BACKOFF_JITTER\n} from './config.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = BACKOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + BACKOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= BACKOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n\n // This handler is called when a different tab tries to upgrade the database.\n this.db.onversionchange = _ => {\n this.#logger('PCache', \"another tab tries to upgrade DB, shutting down\");\n this.db.close();\n this.db = null;\n this.disabled = true;\n };\n\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n\n // Alternatively could use event.oldVersion and event.newVersion\n // to determine which object stores to create or upgrade.\n\n if (!this.db.objectStoreNames.contains('topic')) {\n // Object store (table) for topics. The primary key is the topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n }\n\n if (!this.db.objectStoreNames.contains('user')) {\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n }\n\n if (!this.db.objectStoreNames.contains('subscription')) {\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n }\n\n if (!this.db.objectStoreNames.contains('message')) {\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n }\n\n if (!this.db.objectStoreNames.contains('dellog')) {\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n if (!dellog.indexNames.contains('topic_clear')) {\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n }\n }\n }\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.} ranges - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addDelLog(topicName, delId, ranges) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addDelLog', event.target.error);\n reject(event.target.error);\n };\n ranges.forEach(r => trx.objectStore('dellog').add({\n topic: topicName,\n clear: delId,\n low: r.low,\n hi: r.hi || (r.low + 1)\n }));\n trx.commit();\n });\n }\n\n /**\n * Retrieve deleted message records from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve records for.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readDelLog(topicName, query) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['dellog']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const hi = range.hi || (range.low + 1);\n const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').getAll(key).onsuccess = event => {\n const entries = event.target.result;\n if (entries) {\n if (Array.isArray(entries)) {\n result = result.concat(entries.map(entry => {\n return {\n low: entry.low,\n hi: entry.hi\n };\n }));\n } else {\n result.push({\n low: entries.low,\n hi: entries.hi\n });\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n const result = [];\n const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n result.push({\n low: cursor.value.low,\n hi: cursor.value.hi\n });\n count += cursor.value.hi - cursor.value.low;\n if (limit <= 0 || count < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n /**\n * Retrieve the latest 'clear' ID for the given topic.\n * @param {string} topicName\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n maxDelId(topicName) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve(0) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog']);\n trx.onerror = event => {\n this.#logger('PCache', 'maxDelId', event.target.error);\n reject(event.target.error);\n };\n\n const index = trx.objectStore('dellog').index('topic_clear');\n index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev')\n .onsuccess = event => {\n if (event.target.result) {\n resolve(event.target.result.value);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq',\n 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach(f => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2025 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.25\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(this.logger, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics(data => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n this._db.maxDelId(topic.name).then(clear => {\n topic._maxDel = Math.max(topic._maxDel, clear || 0);\n });\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'aux': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param uniqueTag tag to add, must be fully-qualified; if null or empty, no action is taken.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param prefix prefix to remove\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param prefix prefix to search for.\n * @return the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} tags - Search tags.\n * @property {Object} aux - Auxiliary topic data.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n if (setParams.aux) {\n pkt.sub.set.aux = setParams.aux;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq ID equal or greater than this value.\n * @property {number=} before - Load messages with seq ID lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n * @property {Array.=} range - Ranges of seq IDs to fetch.\n */\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'aux'].forEach(key => {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs.\n *\n * @typedef SeqRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {Array.} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MIN_TAG_LENGTH = 'minTagLength';\nTinode.MAX_TAG_LENGTH = 'maxTagLength';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\nTinode.MSG_DELETE_AGE = 'msgDelAge';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.} ranges - ranges of seq IDs to fetch.\n * @param {number=} limit - maximum number of messages to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataRanges(ranges, limit) {\n this.what['data'] = {\n ranges: normalizeRanges(ranges, this.topic._maxSeq),\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages by an array of IDs.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number[]} list - array of seq IDs to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataList(list) {\n return this.withDataRanges(listToRanges(list));\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withAux() {\n this.what['aux'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the last element from the buffer.\n * @memberof Tinode.CBuffer#\n * @param {function} filter - optional filter to apply to elements. If filter is provided, the search\n * for the last element starts from the end of the buffer and goes backwards until the filter returns true.\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(filter) {\n return filter ?\n this.buffer.findLast(filter) :\n this.buffer[this.buffer.length - 1];\n }\n\n /**\n * Insert new element(s) to the buffer at the correct position according to the sort method.\n * Variadic: takes one or more arguments. If an array is passed as a single argument, its\n * elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive), default: 0.\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive), default: length of the buffer.\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = Math.max(0, startIdx | 0);\n beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n listToRanges,\n mergeObj,\n mergeToCache,\n normalizeArray,\n normalizeRanges\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport default class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacks.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Auxiliary data\n this._aux = {};\n\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onAuxUpdated = callbacks.onAuxUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS,\n 'slf': Const.TOPIC_SLF\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_SLF;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n static #isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the local cache or from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server. The goal is to load continous range of messages\n * covering at least between 'min' and 'max' + one full page forward (newer = true) or backwards\n * (newer=false).\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {Array.} gaps - ranges of messages to load.\n * @param {number} min if non-negative, request newer messages with seq >= min.\n * @param {number} max if positive, request older messages with seq < max.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMessagesPage(limit, gaps, min, max, newer) {\n let query = gaps ?\n this.startMetaQuery().withDataRanges(gaps, limit) :\n newer ?\n this.startMetaQuery().withData(min, undefined, limit) :\n this.startMetaQuery().withData(undefined, max, limit);\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then(count => {\n // Recalculate missing ranges.\n gaps = this.msgHasMoreMessages(min, max, newer);\n if (gaps.length == 0) {\n // All messages loaded.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = this.startMetaQuery().withDataRanges(gaps, limit);\n return this.getMeta(query.build());\n });\n }\n\n /**\n * Request to get pinned messages from the local cache or from the server.\n * @memberof Tinode.Topic#\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getPinnedMessages() {\n const pins = this.aux('pins');\n if (!Array.isArray(pins)) {\n return Promise.resolve(0);\n }\n\n const loaded = [];\n let remains = pins;\n // First try fetching from DB, then check deleted log, then ask the server.\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n })\n .then(msgs => {\n msgs.forEach(data => {\n // The 'data' could be undefined.\n if (data) {\n loaded.push(data.seq);\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n });\n if (loaded.length < pins.length) {\n // Some messages are missing, try dellog.\n remains = pins.filter(seq => !loaded.includes(seq));\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n });\n }\n return null;\n })\n .then(ranges => {\n if (ranges) {\n // Found some deleted ranges in dellog.\n remains.forEach(seq => {\n if (ranges.find(r => r.low <= seq && r.hi > seq)) {\n loaded.push(seq);\n }\n });\n }\n if (loaded.length == pins.length) {\n // Got all pinned messages from the local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: loaded.length\n }\n });\n }\n\n remains = pins.filter(seq => !loaded.includes(seq));\n return this.getMeta(this.startMetaQuery().withDataList(remains).build());\n });\n }\n\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n if (params.aux) {\n this._processMetaAux(params.aux);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Set message as pinned or unpinned by adding it to aux.pins array. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - seq ID of the message to pin or un-pin.\n * @param {boolean} pin - true to pin the message, false to un-pin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinMessage(seq, pin) {\n let pinned = this.aux('pins');\n if (!Array.isArray(pinned)) {\n pinned = [];\n }\n let changed = false;\n if (pin) {\n if (!pinned.includes(seq)) {\n changed = true;\n if (pinned.length == Const.MAX_PINNED_COUNT) {\n pinned.shift();\n }\n pinned.push(seq);\n }\n } else {\n if (pinned.includes(seq)) {\n changed = true;\n pinned = pinned.filter(id => id != seq);\n if (pinned.length == 0) {\n pinned = Const.DEL_CHAR;\n }\n }\n }\n if (changed) {\n return this.setMeta({\n aux: {\n pins: pinned\n }\n });\n }\n return Promise.resolve();\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.Topic#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n // Unsupported operation for non-me topics.\n return Promise.reject(new Error(\"Pinning topics is not supported here\"));\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.Topic#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n // Unsupported for non-me topics.\n return 0;\n }\n\n /**\n * Delete messages. Hard-deleting messages requires Deleter (D) permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n const tosend = normalizeRanges(ranges, this._maxSeq)\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = Math.max(ctrl.params.del, this._maxDel);\n this.clear = Math.max(ctrl.params.del, this.clear);\n }\n\n ranges.forEach(rec => {\n if (rec.hi) {\n this.flushMessageRange(rec.low, rec.hi);\n } else {\n this.flushMessage(rec.low);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n // Make a record.\n this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Send {del} message, return promise\n return this.delMessages(listToRanges(list), hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - had-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get auxiliary entry by key.\n * @memberof Tinode.Topic#\n * @param {string} key - auxiliary data key to retrieve.\n * @return {Object} value for the key or undefined.\n */\n aux(key) {\n return this._aux[key];\n }\n /**\n * Get alias value (unique tag with alias: prefix), if present.\n * The prefix is stripped off.\n * @memberof Tinode.Topic#\n * @return {string} alias or undefined.\n */\n alias() {\n const alias = this._tags && this._tags.find(t => t.startsWith(Const.TAG_ALIAS));\n if (!alias) {\n return undefined;\n }\n // Remove 'alias:' prefix.\n return alias.substring(Const.TAG_ALIAS.length);\n }\n\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (Topic.#isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n if (msg._deleted) {\n // Skip deleted ranges.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by literal seq (does not resolve message edits).\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent non-deleted message from cache.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast(msg => !msg._deleted);\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {number} min - smallest seq ID loaded range.\n * @param {number} max - greatest seq ID in loaded range.\n * @param {boolean} newer - if true, check for newer messages only.\n * @returns {Array.} - missing ranges in the selected direction.\n */\n msgHasMoreMessages(min, max, newer) {\n // Find gaps in cached messages.\n const gaps = [];\n if (min >= max) {\n return gaps;\n }\n let maxSeq = 0;\n let gap;\n this._messages.forEach((msg, prev) => {\n const p = prev || {\n seq: 0\n };\n const expected = p._deleted ? p.hi : p.seq + 1;\n if (msg.seq > expected) {\n gap = {\n low: expected,\n hi: msg.seq\n };\n } else {\n gap = null;\n }\n // If newer: collect all gaps from min to infinity.\n // If older: collect all gaps from max to zero.\n if (gap && (newer ? gap.hi >= min : gap.low < max)) {\n gaps.push(gap);\n }\n maxSeq = expected;\n });\n\n if (maxSeq < this.seq) {\n gap = {\n low: maxSeq + 1,\n hi: this.seq + 1\n };\n if (newer ? gap.hi >= min : gap.low < max) {\n gaps.push(gap);\n }\n }\n return gaps;\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a 'slf' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'slf' topic, false otherwise.\n */\n isSelfType() {\n return Topic.isSelfTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!Topic.#isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n const upd = {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n };\n if (data.head.vc) {\n upd.vc = true;\n }\n data.content = Drafty.updateVideoCall(data.content, upd);\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (meta.aux) {\n this._processMetaAux(meta.aux);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'aux':\n // Auxiliary data updated.\n this.getMeta(this.startMetaQuery().withAux().build());\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived, in response to received\n // {ctrl} after setMeta-sub, or as a handler for {pres what=sub}.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n if (!this._users[sub.user]) {\n // New subscription.\n this.subcnt++;\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n this.subcnt--;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags == Const.DEL_CHAR || (tags.length == 1 && tags[0] == Const.DEL_CHAR)) {\n tags = [];\n }\n this._tags = tags;\n this._tinode._db.updTopic(this);\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n\n // Called by Tinode when meta.aux is recived.\n _processMetaAux(aux) {\n aux = (!aux || aux == Const.DEL_CHAR) ? {} : aux;\n this._aux = mergeObj(this._aux, aux);\n this._tinode._db.updTopic(this);\n if (this.onAuxUpdated) {\n this.onAuxUpdated(this._aux);\n }\n }\n\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(rec => {\n if (!rec.hi) {\n count++;\n this.flushMessage(rec.low);\n } else {\n count += rec.hi - rec.low;\n this.flushMessageRange(rec.low, rec.hi);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n this._tinode._db.addDelLog(this.name, clear, delseq);\n }\n\n if (count > 0) {\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, query) {\n query = query || {};\n query.limit = query.limit || Const.DEFAULT_MESSAGES_PAGE;\n\n // Count of message loaded from DB.\n let count = 0;\n return db.readMessages(this.name, query)\n .then(msgs => {\n msgs.forEach(data => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n count = msgs.length;\n })\n .then(_ => db.readDelLog(this.name, query))\n .then(dellog => {\n return dellog.forEach(rec => {\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n })\n .then(_ => {\n // DEBUG\n return count;\n });\n }\n\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n","/**\n * @file Definition of 'fnd' topic.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeToCache\n} from './utils.js';\n\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport default class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Check if the given tag is unique by asking the server.\n * @param tag tag to check.\n * @return promise to be resolved with true if the tag is unique, false otherwise.\n */\n checkTagUniqueness(tag, caller) {\n return new Promise((resolve, reject) => {\n this.subscribe()\n .then(_ => this.setMeta({\n desc: {\n public: tag\n }\n }))\n .then(_ => this.getMeta(this.startMetaQuery().withTags().build()))\n .then(meta => {\n if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n resolve(true);\n }\n const tags = meta.tags.filter(t => t !== caller);\n resolve(tags.length == 0);\n })\n .catch(err => {\n reject(err);\n });\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Definition of 'me' topic.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeObj\n} from './utils.js';\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport default class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.topic = pres.src;\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));\n }\n if (!Topic.isCommTopicName(topic)) {\n return Promise.reject(new Error(\"Invalid topic to pin\"));\n }\n\n const tpin = Array.isArray(this.private && this.private.tpin) ? this.private.tpin : [];\n const found = tpin.includes(topic);\n if ((pin && found) || (!pin && !found)) {\n // Nothing to do.\n return Promise.resolve(tpin);\n }\n\n if (pin) {\n // Add topic to the top of the pinned list.\n tpin.unshift(topic);\n } else {\n // Remove topic from the pinned list.\n tpin.splice(tpin.indexOf(topic), 1);\n }\n\n return this.setMeta({\n desc: {\n private: {\n tpin: tpin.length > 0 ? tpin : Const.DEL_CHAR\n }\n }\n });\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.TopicMe#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n if (!this.private || !this.private.tpin) {\n return 0;\n }\n const idx = this.private.tpin.indexOf(topic);\n return idx < 0 ? 0 : this.private.tpin.length - idx;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","DRAFTY_FR_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","name","start","end","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","val","test","url","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","undefined","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","logger","bin","atob","length","buf","ArrayBuffer","arr","Uint8Array","i","charCodeAt","URL","createObjectURL","Blob","type","err","message","base64toDataUrl","DECORATORS","open","_","close","data","props","href","target","id","act","ref","mime","Drafty","src","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","chunkify","line","spans","chunks","span","at","push","chunk","tp","chld","children","toSpanTree","tree","last","draftyToTree","doc","Array","isArray","text","len","key","attachments","forEach","includes","stringToGraphemes","sort","a","b","diff","indexOf","graphemes","spansToTree","treeTopDown","node","child","parent","addNode","n","map","segment","join","att","subspans","inner","tag","treeToDrafty","keymap","c","Object","keys","newKey","transformer","context","dst","call","treeBottomUp","formatter","index","stack","values","pop","shortenTree","limit","tail","lightEntity","allow","copyEntData","lTrim","trimStart","shift","attachmentsToEnd","isFormResponseType","concat","draftify","startAt","plain","ranges","drafty","light","entries","dc","isEmptyObject","obj","toGraphemeValues","segments","indices","result","graphemeIndex","charIndex","graphemeIndices","correctAt","str","from","init","plainText","parse","content","lines","split","entityMap","entityIndex","blx","entities","block","original","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","spannify","match","extracted","entity","offset","unique","idx","filter","el","extractEntities","ele","s","correctLen","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","params","assign","quote","header","uid","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","appendButton","attachJSON","UNSAFE_toHTML","format","shorten","forwardedContent","replyContent","startsWith","forwarding","toPlainText","isPlainText","toMarkdown","def","isValid","txt_type","hasAttachments","callback","count","hasEntities","styles","sanitizeEntities","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","mimeType","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","value","AccessMode","constructor","acs","given","decode","want","mode","side","flag","Error","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_GRP","LOCAL_SEQID","DEL_CHAR","TAG_ALIAS","CommError","code","super","jsonParseHelper","date","Date","isNaN","isUrlRelative","isValidDate","getTime","mergeObj","console","warn","mergeToCache","cache","newval","simplify","getOwnPropertyNames","normalizeRanges","maxSeq","r1","r2","low","hi","reduce","out","prev","Math","max","listToRanges","list","WebSocketProvider","XHRProvider","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","Connection","static","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","setNetworkProviders","wsProvider","xhrProvider","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","clearTimeout","timeout","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","_lpURL","_poller","_sender","lp_poller","url_","resolve","poller","promiseCompleted","onreadystatechange","evt","readyState","status","pkt","JSON","responseText","ctrl","sid","send","onOpen","onMessage","onDisconnect","abort","sender","lp_sender","OPEN","conn","onerror","onopen","onclose","onmessage","NETWORK_ERROR","DB_NAME","IDBProvider","DB","db","disabled","onError","source","trx","transaction","event","error","objectStore","getAll","onsuccess","topic","initDatabase","req","onversionchange","onupgradeneeded","objectStoreNames","contains","createObjectStore","keyPath","dellog","indexNames","createIndex","deleteDatabase","onblocked","isReady","updTopic","oncomplete","put","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","updUser","pub","arguments","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","mapSubscriptions","addMessage","add","updMessageStatus","seq","_status","remMessages","to","range","readMessages","query","msgs","since","before","openCursor","cursor","continue","addDelLog","delId","clear","readDelLog","entry","maxDelId","f","tags","_tags","setAccessMode","read","unread","getAccessMode","setDatabaseProvider","idbProvider","IndexedDBProvider","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","relUrl","location","origin","searchParams","substring","addURLParam","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","updated","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withDataRanges","withDataList","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withAux","withDel","withLaterDel","_maxDel","extract","build","CBuffer","buffer","compare_","unique_","elem","exact","pivot","found","splice","getAt","getLast","findLast","insert","delAt","delRange","reset","startIdx","beforeIdx","min","find","nearest","isEmpty","Topic","callbacks","created","touched","private","trusted","_users","_queuedSeqId","Const","_noEarlierMsgs","_recvNotificationTimer","_credentials","_aux","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onAuxUpdated","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isSelfTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","head","replace","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","gaps","newer","startMetaQuery","_loadMessages","msgHasMoreMessages","getPinnedMessages","pins","aux","remains","setMeta","t","trim","toLowerCase","item","pos","ary","normalizeArray","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","_processMetaAux","subscriber","am","invite","archive","arch","pinMessage","pin","pinned","changed","pinTopic","pinnedTopicRank","delMessages","hard","tosend","del","rec","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","alias","origSeq","versions","messages","sinceId","beforeId","unused1","unused2","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","gap","p","expected","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isSelfType","isChannelType","isGroupType","isCommType","isMe","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","vc","_routeInfo","_routeMeta","meta","_processDelMessages","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","subcnt","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicFnd","_contacts","updateCount","indexBy","getPrototypeOf","checkTagUniqueness","caller","contacts","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","getContact","getCredentials","tpin","unshift","b64EncodeUnicode","btoa","encodeURIComponent","p1","String","fromCharCode","jsonBuildHelper","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","rfc3339DateString","jsonLoggerHelper","WebSocket","XMLHttpRequest","indexedDB","chars","global","input","output","charCode","bc","bs","DBCache","initForNonBrowserApp","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","getBrowserInfo","userAgent","language","detectTransport","promise","persist","all","args","dateString","log","onOK","errorText","stringify","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","setInterval","expires","hello","clearInterval","func","_cacheDelUser","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","isValidTagValue","tagSplit","splitAt","prefix","setUniqueTag","uniqueTag","clearTagPrefix","tagByPrefix","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","MSG_DELETE_AGE","URI_TOPIC_ID_PREFIX","TAG_EMAIL","TAG_PHONE"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"tinode.prod.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/drafty.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/access-mode.js","webpack://tinode/./version.js","webpack://tinode/./src/config.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/utils.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/me-topic.js","webpack://tinode/./src/the-card.js","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, function() {\nreturn ","/**\n * @copyright 2015-2026 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n *

    Supports conversion of user keyboard input to formatted text:

    \n *
      \n *
    • *abc* → abc
    • \n *
    • _abc_ → abc
    • \n *
    • ~abc~ → abc
    • \n *
    • `abc` → abc
    • \n *
    \n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n *
    \n *     this is *bold*, `code` and _italic_, ~strike~\n *     combined *bold and _italic_*\n *     an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n *     this is a @mention and a #hashtag in a string\n *     second #hashtag\n * 
    \n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\n// Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE = 'text/x-drafty-fr';\n// Legacy Drafty form-response MIME type.\nconst DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'fn', 'incoming', 'mime', 'name',\n 'premime', 'preref', 'preview', 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n TC: { // TheCard\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
    ',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Row: logic grouping of elements\n RW: {\n open: _ => '
    ',\n close: _ => '
    '\n },\n // Quoted block.\n QQ: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: (data) => {\n return data ? {} : null;\n },\n },\n TC: { // TheCard\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-fn': data.fn,\n 'data-title': data.title,\n };\n }\n },\n // Video call\n VC: {\n open: _ => '
    ',\n close: _ => '
    ',\n props: data => {\n if (!data) return {};\n return {\n 'data-duration': data.duration,\n 'data-state': data.state,\n };\n }\n },\n // Video.\n VD: {\n open: data => {\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = data.ref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return '';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: DRAFTY_FR_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Append TheCard to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append TheCard to.\n * @param {Object} theCardData - TheCard data object.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendTheCard = function(content, theCardData) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n key: content.ent.length\n });\n content.txt += ' ';\n\n // const {...object} = classInstance;\n content.ent.push({\n tp: 'TC',\n data: theCardData\n });\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup. DO NOT use in production code.\n *\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data - entity data.\n * @param {string} tp - entity type.\n * @param {number} index - entity's index in `content.ent`.\n *\n * @returns {boolean} 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (!Drafty.isFormResponseType(entData.mime) && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\nDrafty.contentType = DRAFTY_MIME_TYPE;\n\n/**\n * Check if the given mime-type is a MIME type of drafty form response.\n * @memberof Drafty\n * @static\n *\n * @returns {boolean} true if given mime type is drafty form response, false otherwise.\n */\nDrafty.isFormResponseType = function(mimeType) {\n return mimeType === DRAFTY_FR_MIME_TYPE ||\n mimeType === DRAFTY_FR_MIME_TYPE_LEGACY;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (Drafty.isFormResponseType(c.data['mime'])) {\n // Form response attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.26.0-alpha3\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2026 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.25';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n\n// Parameters of exponential backoff for reconnect attempts.\n// 2000 milliseconds, minimum delay between reconnects.\nexport const BACKOFF_BASE = 2_000;\n// Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes.\nexport const BACKOFF_MAX_ITER = 10;\n// Random jitter between reconnection attempts, 0.3 -> 30% jitter.\nexport const BACKOFF_JITTER = 0.3;\n\n// Names of keys to server-provided configuration limits.\nexport const MAX_MESSAGE_SIZE = 'maxMessageSize';\nexport const MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nexport const MIN_TAG_LENGTH = 'minTagLength';\nexport const MAX_TAG_LENGTH = 'maxTagLength';\nexport const MAX_TAG_COUNT = 'maxTagCount';\nexport const MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nexport const REQ_CRED_VALIDATORS = 'reqCred';\nexport const MSG_DELETE_AGE = 'msgDelAge';\nexport const ICE_SERVERS = 'iceServers';\nexport const REACTION_LIST = 'reactions';\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return dst;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n console.warn(\"Error merging property:\", prop, err);\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval) {\n cache[key] = mergeObj(cache[key], newval);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n BACKOFF_BASE,\n BACKOFF_MAX_ITER,\n BACKOFF_JITTER\n} from './config.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param {Object} wsProvider - WebSocket provider, e.g. for nodeJS, require('ws').\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {Function} l - variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ - Host name to connect to; if null the old host name will be used.\n * @param {boolean} force - Force new connection even if one already exists.\n * @returns {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = BACKOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + BACKOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= BACKOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise - promise resolved or rejected when the reconnect attempt completes.\n *\n */\n /**\n * A callback to inform when the next attempt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n\n // This handler is called when a different tab tries to upgrade the database.\n this.db.onversionchange = _ => {\n this.#logger('PCache', \"another tab tries to upgrade DB, shutting down\");\n this.db.close();\n this.db = null;\n this.disabled = true;\n };\n\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n\n // Alternatively could use event.oldVersion and event.newVersion\n // to determine which object stores to create or upgrade.\n\n if (!this.db.objectStoreNames.contains('topic')) {\n // Object store (table) for topics. The primary key is the topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n }\n\n if (!this.db.objectStoreNames.contains('user')) {\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n }\n\n if (!this.db.objectStoreNames.contains('subscription')) {\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n }\n\n if (!this.db.objectStoreNames.contains('message')) {\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n }\n\n if (!this.db.objectStoreNames.contains('dellog')) {\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n if (!dellog.indexNames.contains('topic_clear')) {\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n }\n }\n }\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point in updating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (src && src._status != status) {\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Update reactions to a message.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update.\n * @param {Array} react - updated reactions.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageReact(topicName, seq, react) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageReact', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (src && src.react !== react) {\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n react: react\n }));\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.} ranges - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addDelLog(topicName, delId, ranges) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addDelLog', event.target.error);\n reject(event.target.error);\n };\n ranges.forEach(r => trx.objectStore('dellog').add({\n topic: topicName,\n clear: delId,\n low: r.low,\n hi: r.hi || (r.low + 1)\n }));\n trx.commit();\n });\n }\n\n /**\n * Retrieve deleted message records from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve records for.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readDelLog(topicName, query) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['dellog']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const hi = range.hi || (range.low + 1);\n const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').getAll(key).onsuccess = event => {\n const entries = event.target.result;\n if (entries) {\n if (Array.isArray(entries)) {\n result = result.concat(entries.map(entry => {\n return {\n low: entry.low,\n hi: entry.hi\n };\n }));\n } else {\n result.push({\n low: entries.low,\n hi: entries.hi\n });\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readDelLog', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n const result = [];\n const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);\n trx.objectStore('dellog').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n result.push({\n low: cursor.value.low,\n hi: cursor.value.hi\n });\n count += cursor.value.hi - cursor.value.low;\n if (limit <= 0 || count < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n /**\n * Retrieve the latest 'clear' ID for the given topic.\n * @param {string} topicName\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n maxDelId(topicName) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve(0) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['dellog']);\n trx.onerror = event => {\n this.#logger('PCache', 'maxDelId', event.target.error);\n reject(event.target.error);\n };\n\n const index = trx.objectStore('dellog').index('topic_clear');\n index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev')\n .onsuccess = event => {\n if (event.target.result) {\n resolve(event.target.result.value);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq',\n 'clear', 'mrrid', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted',\n '_mrrSeen'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach(f => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content', 'react'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl - base URL of upload server.\n * @param {File|Blob} data - data to upload.\n * @param {string} avatarFor - topic name if the upload represents an avatar.\n * @param {Function} onProgress - callback. Takes one {number} parameter 0..1\n * @param {Function} onSuccess - callback. Called when the file is successfully uploaded.\n * @param {Function} onFailure - callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total, data.type || 'application/octet-stream');\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total, data.type || 'application/octet-stream');\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data - data to upload.\n * @param {string} avatarFor - topic name if the upload represents an avatar.\n * @param {Function} onProgress - callback. Takes one {number} parameter 0..1\n * @param {Function} onSuccess - callback. Called when the file is successfully uploaded.\n * @param {Function} onFailure - callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.} ranges - ranges of seq IDs to fetch.\n * @param {number=} limit - maximum number of messages to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataRanges(ranges, limit) {\n this.what['data'] = {\n ranges: normalizeRanges(ranges, this.topic._maxSeq),\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages by an array of IDs.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number[]} list - array of seq IDs to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataList(list) {\n return this.withDataRanges(listToRanges(list));\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withAux() {\n this.what['aux'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n/**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback Tinode.ForEachCallbackType\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n/**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback Tinode.FilterCallbackType\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolean} true to keep the element, false to remove.\n */\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {Function} compare - custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique - enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the last element from the buffer.\n * @memberof Tinode.CBuffer#\n * @param {function} filter - optional filter to apply to elements. If filter is provided, the search\n * for the last element starts from the end of the buffer and goes backwards until the filter returns true.\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(filter) {\n return filter ?\n this.buffer.findLast(filter) :\n this.buffer[this.buffer.length - 1];\n }\n\n /**\n * Insert new element(s) to the buffer at the correct position according to the sort method.\n * Variadic: takes one or more arguments. If an array is passed as a single argument, its\n * elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive), default: 0.\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive), default: length of the buffer.\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = Math.max(0, startIdx | 0);\n beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n listToRanges,\n mergeObj,\n mergeToCache,\n normalizeArray,\n normalizeRanges\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport default class Topic {\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {Function} callbacks.onData - Callback which receives a {data} message.\n * @param {Function} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {Function} callbacks.onPres - Callback which receives a {pres} message.\n * @param {Function} callbacks.onInfo - Callback which receives an {info} message.\n * @param {Function} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {Function} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {Function} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {Function} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {Function} callbacks.onTagsUpdated - Called after user discovery tags are updated.\n * @param {Function} callbacks.onCredsUpdated - Called after credentials are updated.\n * @param {Function} callbacks.onAuxUpdated - Called after auxiliary data is updated.\n * @param {Function} callbacks.onReact - Called after message reactions are updated.\n * @param {Function} callbacks.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n // Last known messge sequence number.\n this.seq = 0;\n // Last known read message ID.\n this.read = 0;\n // Last known received message ID.\n this.recv = 0;\n // Last known deleted message ID.\n this.clear = 0;\n // Last known reaction ID.\n this.mrrid = 0;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // The maximum seen reaction ID, same logic as read.\n this._mrrSeen = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Auxiliary data\n this._aux = {};\n\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trigger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onAuxUpdated = callbacks.onAuxUpdated;\n this.onReact = callbacks.onReact;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS,\n 'slf': Const.TOPIC_SLF\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_SLF;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n static #isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the local cache or from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} params - request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server. The goal is to load continous range of messages\n * covering at least between 'min' and 'max' + one full page forward (newer = true) or backwards\n * (newer=false).\n * @memberof Tinode.Topic#\n *\n * @param {number} limit - number of messages to get.\n * @param {Array.} gaps - ranges of messages to load.\n * @param {number} min - if non-negative, request newer messages with seq >= min.\n * @param {number} max - if positive, request older messages with seq < max.\n * @param {boolean} newer - if true, fetch newer messages; if false, fetch older messages.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMessagesPage(limit, gaps, min, max, newer) {\n let query = gaps ?\n this.startMetaQuery().withDataRanges(gaps, limit) :\n newer ?\n this.startMetaQuery().withData(min, undefined, limit) :\n this.startMetaQuery().withData(undefined, max, limit);\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then(count => {\n // Recalculate missing ranges.\n gaps = this.msgHasMoreMessages(min, max, newer);\n if (gaps.length == 0) {\n // All messages loaded.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = this.startMetaQuery().withDataRanges(gaps, limit);\n return this.getMeta(query.build());\n });\n }\n\n /**\n * Request to get pinned messages from the local cache or from the server.\n * @memberof Tinode.Topic#\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getPinnedMessages() {\n const pins = this.aux('pins');\n if (!Array.isArray(pins)) {\n return Promise.resolve(0);\n }\n\n const loaded = [];\n let remains = pins;\n // First try fetching from DB, then check deleted log, then ask the server.\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n })\n .then(msgs => {\n msgs.forEach(data => {\n // The 'data' could be undefined.\n if (data) {\n loaded.push(data.seq);\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n });\n if (loaded.length < pins.length) {\n // Some messages are missing, try dellog.\n remains = pins.filter(seq => !loaded.includes(seq));\n return this._tinode._db.readMessages(this.name, {\n ranges: listToRanges(remains)\n });\n }\n return null;\n })\n .then(ranges => {\n if (ranges) {\n // Found some deleted ranges in dellog.\n remains.forEach(seq => {\n if (ranges.find(r => r.low <= seq && r.hi > seq)) {\n loaded.push(seq);\n }\n });\n }\n if (loaded.length == pins.length) {\n // Got all pinned messages from the local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: loaded.length\n }\n });\n }\n\n remains = pins.filter(seq => !loaded.includes(seq));\n return this.getMeta(this.startMetaQuery().withDataList(remains).build());\n });\n }\n\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params - parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n if (params.aux) {\n this._processMetaAux(params.aux);\n }\n if (params.react) {\n params.react.mrrid = ctrl.params?.mrrid | 0;\n this._processMetaReact(undefined, params.react);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subscriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Set message as pinned or unpinned by adding it to aux.pins array. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - seq ID of the message to pin or un-pin.\n * @param {boolean} pin - true to pin the message, false to un-pin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinMessage(seq, pin) {\n let pinned = this.aux('pins');\n if (!Array.isArray(pinned)) {\n pinned = [];\n }\n let changed = false;\n if (pin) {\n if (!pinned.includes(seq)) {\n changed = true;\n if (pinned.length == Const.MAX_PINNED_COUNT) {\n pinned.shift();\n }\n pinned.push(seq);\n }\n } else {\n if (pinned.includes(seq)) {\n changed = true;\n pinned = pinned.filter(id => id != seq);\n if (pinned.length == 0) {\n pinned = Const.DEL_CHAR;\n }\n }\n }\n if (changed) {\n return this.setMeta({\n aux: {\n pins: pinned\n }\n });\n }\n return Promise.resolve();\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.Topic#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n // Unsupported operation for non-me topics.\n return Promise.reject(new Error(\"Pinning topics is not supported here\"));\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.Topic#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n // Unsupported for non-me topics.\n return 0;\n }\n\n /**\n * Send or remove a reaction for a message in this topic.\n * If the same reaction from the current user is already present, remove it.\n * @memberof Tinode.Topic#\n *\n * @param {int} seq - ID of the message to react to.\n * @param {string} emo - Emoji string to add as reaction, or Tinode.DEL_CHAR to remove reaction.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n react(seq, emo) {\n if (!seq || !emo) {\n return Promise.reject(new Error(\"Invalid parameters\"));\n }\n const curr = this.msgMyReaction(seq);\n if (curr == emo) {\n // Treat the same value as toggle.\n emo = Const.DEL_CHAR;\n }\n return this.setMeta({\n react: {\n seq: seq,\n val: emo\n }\n });\n }\n\n /**\n * Get a list of allowed reactions for this topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Array.} Array of allowed reaction strings.\n */\n reactions() {\n const react = this.aux('react');\n if (react) {\n return react.vals;\n }\n return this._tinode.getServerParam(Const.REACTION_LIST);\n }\n\n /**\n * Mark all known reactions as seen.\n * @memberof Tinode.Topic#\n */\n markReactionsSeen() {\n if (this._mrrSeen != this.mrrid) {\n this._mrrSeen = this.mrrid;\n // Sent a notification to 'me' listeners.\n this._tinode.getMeTopic()._refreshContact('react', this);\n }\n }\n\n /**\n * Delete messages. Hard-deleting messages requires Deleter (D) permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n const tosend = normalizeRanges(ranges, this._maxSeq)\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = Math.max(ctrl.params.del, this._maxDel);\n this.clear = Math.max(ctrl.params.del, this.clear);\n }\n\n ranges.forEach(rec => {\n if (rec.hi) {\n this.flushMessageRange(rec.low, rec.hi);\n } else {\n this.flushMessage(rec.low);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n // Make a record.\n this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.} list - list of seq IDs to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesList(list, hardDel) {\n // Send {del} message, return promise\n return this.delMessages(listToRanges(list), hardDel);\n }\n\n /**\n * Delete original message and edited variants. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message to delete.\n * @param {boolean=} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delMessagesEdits(seq, hardDel) {\n const list = [seq];\n this.messageVersions(seq, msg => list.push(msg.seq));\n // Send {del} message, return promise\n return this.delMessagesList(list, hardDel);\n }\n\n /**\n * Delete topic. Requires Owner permission. Wrapper for {@link Tinode#delTopic}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n delTopic(hard) {\n if (this._deleted) {\n // The topic is already deleted at the server, just remove from DB.\n this._gone();\n return Promise.resolve(null);\n }\n\n return this._tinode.delTopic(this.name, hard).then(ctrl => {\n this._deleted = true;\n this._resetSub();\n this._gone();\n return ctrl;\n });\n }\n /**\n * Delete subscription. Requires Share permission. Wrapper for {@link Tinode#delSubscription}.\n * @memberof Tinode.Topic#\n *\n * @param {string} user - ID of the user to remove subscription for.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delSubscription(user) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete subscription in inactive topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delSubscription(this.name, user).then(ctrl => {\n // Remove the object from the subscription cache;\n delete this._users[user];\n // Notify listeners\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n return ctrl;\n });\n }\n /**\n * Send a read/recv notification.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what notification to send: recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to acknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to acknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification that a video or audio message is being recorded. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param {boolean} audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification that a file is being uploaded. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param {boolean} type - true if file being uploaded.\n */\n noteUpload(type) {\n const types = {\n 'image': 'kpui',\n 'video': 'kpuv',\n 'file': 'kpu'\n };\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, types[type] || 'kpu');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {number} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.} a copy of tags\n */\n tags() {\n // Return a copy.\n return this._tags.slice(0);\n }\n /**\n * Get auxiliary entry by key.\n * @memberof Tinode.Topic#\n * @param {string} key - auxiliary data key to retrieve.\n * @return {Object} value for the key or undefined.\n */\n aux(key) {\n return this._aux[key];\n }\n /**\n * Get alias value (unique tag with alias: prefix), if present.\n * The prefix is stripped off.\n * @memberof Tinode.Topic#\n * @return {string} alias or undefined.\n */\n alias() {\n const alias = this._tags && this._tags.find(t => t.startsWith(Const.TAG_ALIAS));\n if (!alias) {\n return undefined;\n }\n // Remove 'alias:' prefix.\n return alias.substring(Const.TAG_ALIAS.length);\n }\n\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (Topic.#isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n if (msg._deleted) {\n // Skip deleted ranges.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by literal seq (does not resolve message edits).\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent non-deleted message from cache.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast(msg => !msg._deleted);\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n\n /**\n * Return reactions for the message with the given seq id if present.\n * @memberof Tinode.Topic#\n * @param {number} seq - message seq id.\n * @returns {Array} array of reaction objects or empty array.\n */\n msgReactions(seq) {\n const msg = this.findMessage(seq);\n if (!msg) {\n return [];\n }\n return msg.react || [];\n }\n\n /**\n * Return current user's reaction value for the given message.\n * @memberof Tinode.Topic#\n * @param {number} seq - message seq id.\n * @returns {string|null} current user's reaction value or null.\n */\n msgMyReaction(seq) {\n const reactions = this.msgReactions(seq);\n const me = this._tinode.getCurrentUserID();\n for (let i = 0; i < reactions.length; i++) {\n if ((reactions[i].users || []).includes(me)) {\n return reactions[i].val;\n }\n }\n return null;\n }\n\n /**\n * Check if topic has unseen reactions.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} true if there are unseen reactions, false otherwise.\n */\n hasUnseenReactions() {\n return this.mrrid > this._mrrSeen;\n }\n\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {number} min - smallest seq ID loaded range.\n * @param {number} max - greatest seq ID in loaded range.\n * @param {boolean} newer - if true, check for newer messages only.\n * @returns {Array.} - missing ranges in the selected direction.\n */\n msgHasMoreMessages(min, max, newer) {\n // Find gaps in cached messages.\n const gaps = [];\n if (min >= max) {\n return gaps;\n }\n let maxSeq = 0;\n let gap;\n this._messages.forEach((msg, prev) => {\n const p = prev || {\n seq: 0\n };\n const expected = p._deleted ? p.hi : p.seq + 1;\n if (msg.seq > expected) {\n gap = {\n low: expected,\n hi: msg.seq\n };\n } else {\n gap = null;\n }\n // If newer: collect all gaps from min to infinity.\n // If older: collect all gaps from max to zero.\n if (gap && (newer ? gap.hi >= min : gap.low < max)) {\n gaps.push(gap);\n }\n maxSeq = expected;\n });\n\n if (maxSeq < this.seq) {\n gap = {\n low: maxSeq + 1,\n hi: this.seq + 1\n };\n if (newer ? gap.hi >= min : gap.low < max) {\n gaps.push(gap);\n }\n }\n return gaps;\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a 'slf' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'slf' topic, false otherwise.\n */\n isSelfType() {\n return Topic.isSelfTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!Topic.#isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n const upd = {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n };\n if (data.head.vc) {\n upd.vc = true;\n }\n data.content = Drafty.updateVideoCall(data.content, upd);\n }\n\n // Normalize reactions payload if present: server uses 'react' field with array of\n // {value, count, users}.\n if (data.react) {\n let maxReact = 0;\n data.react = (data.react || []).map(r => {\n maxReact = Math.max(maxReact, r.mrrid);\n return {\n mrrid: r.mrrid,\n val: r.val,\n count: r.count | 0,\n users: Array.isArray(r.users) ? r.users.slice() : []\n };\n });\n if (this.mrrid < maxReact) {\n this.mrrid = maxReact;\n }\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (meta.aux) {\n this._processMetaAux(meta.aux);\n }\n if (meta.react) {\n this._processMetaReact(meta.react);\n }\n\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'aux':\n // Auxiliary data updated.\n this.getMeta(this.startMetaQuery().withAux().build());\n break;\n case 'react':\n // Reaction to message.\n this._processMetaReact(undefined, {\n mrrid: pres.id2 | 0,\n seq: pres.seq | 0,\n user: pres.act,\n val: pres.val,\n });\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is received, in response to received\n // {ctrl} after setMeta-sub, or as a handler for {pres what=sub}.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n if (!this._users[sub.user]) {\n // New subscription.\n this.subcnt++;\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n this.subcnt--;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is received.\n _processMetaTags(tags) {\n if (tags == Const.DEL_CHAR || (tags.length == 1 && tags[0] == Const.DEL_CHAR)) {\n tags = [];\n }\n this._tags = tags;\n this._tinode._db.updTopic(this);\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n\n // Called by Tinode when meta.aux is received.\n _processMetaAux(aux) {\n aux = (!aux || aux == Const.DEL_CHAR) ? {} : aux;\n this._aux = mergeObj(this._aux, aux);\n this._tinode._db.updTopic(this);\n if (this.onAuxUpdated) {\n this.onAuxUpdated(this._aux);\n }\n }\n\n // Handle an incremental reaction update for a message.\n // delta: {val, users: [user]}\n // The users could be empty or contain exactly one user.\n // 1. If user has already reacted with the same emoji, remove the reaction.\n // 2. If user has already reacted with a different emoji, change the reaction.\n // 3. If user has not reacted yet, add the reaction to the same emoji, if present.\n // 4. If user has not reacted yet, and no one reacted that way, create a new reaction.\n _handleReactionDiff(msg, delta) {\n const reacts = [...(msg.react || [])];\n // Find if the given user has already reacted.\n const user = delta.users[0];\n const found = user ? reacts.findIndex(r => r.users.includes(user)) : -1;\n if (found >= 0) {\n const existing = reacts[found];\n if (delta.val == Const.DEL_CHAR || existing.val == delta.val) {\n // Remove existing reaction.\n existing.count--;\n existing.mrrid = Math.max(existing.mrrid, delta.mrrid);\n if (existing.count <= 0) {\n reacts.splice(found, 1);\n } else {\n const userIdx = existing.users.indexOf(user);\n existing.users.splice(userIdx, 1);\n }\n } else {\n // User changed reaction.\n const userIdx = existing.users.indexOf(user);\n existing.users.splice(userIdx, 1);\n existing.count--;\n if (existing.count <= 0) {\n reacts.splice(found, 1);\n }\n // Add user reaction as a different emoji.\n const emoIndex = reacts.findIndex(r => r.val == delta.val);\n if (emoIndex >= 0) {\n // Add to existing reaction.\n reacts[emoIndex].users.push(user);\n reacts[emoIndex].count++;\n reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid);\n } else {\n // Create new reaction.\n reacts.push({\n mrrid: delta.mrrid,\n users: [user],\n count: 1,\n val: delta.val\n });\n }\n }\n } else if (delta.val != Const.DEL_CHAR) {\n // Existing user has not reacted yet.\n // Find reaction of the same type.\n const emoIndex = reacts.findIndex(r => r.val == delta.val);\n if (emoIndex >= 0) {\n // Add to existing reaction.\n if (user) {\n reacts[emoIndex].users.push(user);\n }\n reacts[emoIndex].count++;\n reacts[emoIndex].mrrid = Math.max(reacts[emoIndex].mrrid, delta.mrrid);\n } else {\n // Create new reaction.\n reacts.push({\n mrrid: delta.mrrid,\n users: user ? [user] : [],\n count: 1,\n val: delta.val\n });\n }\n }\n return reacts;\n }\n\n // Called by Tinode when meta.aux is recived.\n _processMetaReact(reacts, oneReaction) {\n if (!Array.isArray(reacts)) {\n if (!oneReaction.seq || !oneReaction.val) {\n this._tinode.logger(\"WARNING: invalid reaction\");\n return;\n }\n reacts = [{\n _diff: true, // Indicate that this is a delta update.\n seq: oneReaction.seq,\n data: [{\n mrrid: oneReaction.mrrid,\n val: oneReaction.val,\n count: 1,\n users: [oneReaction.user || this._tinode.getCurrentUserID()]\n }]\n }];\n }\n // Process reactions metadata. meta.react is an array of {seq, data: [{val, count, users}]}\n const seqIds = [];\n reacts.forEach(mr => {\n const msg = this.findMessage(mr.seq);\n seqIds.push(mr.seq);\n if (msg) {\n let upd;\n if (mr._diff) {\n // Single incremental update.\n upd = this._handleReactionDiff(msg, mr.data[0]);\n } else {\n upd = (mr.data || []).map(r => ({\n mrrid: r.mrrid,\n val: r.val,\n count: r.count | 0,\n users: Array.isArray(r.users) ? r.users.slice() : []\n }));\n }\n msg.react = upd;\n const maxReact = upd.reduce((max, r) => Math.max(max, r.mrrid), 0);\n if (this.mrrid < maxReact) {\n this.mrrid = maxReact;\n }\n this._tinode._db.updMessageReact(this.name, mr.seq, msg.react);\n }\n });\n // Notify UI listeners of changes.\n if (this.onReact) {\n this.onReact(seqIds);\n }\n }\n\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(rec => {\n if (!rec.hi) {\n count++;\n this.flushMessage(rec.low);\n } else {\n count += rec.hi - rec.low;\n this.flushMessageRange(rec.low, rec.hi);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n this._tinode._db.addDelLog(this.name, clear, delseq);\n }\n\n if (count > 0) {\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._maxDel = 0;\n this._maxReact = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subscribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, query) {\n query = query || {};\n query.limit = query.limit || Const.DEFAULT_MESSAGES_PAGE;\n\n // Count of message loaded from DB.\n let count = 0;\n return db.readMessages(this.name, query)\n .then(msgs => {\n msgs.forEach(data => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n count = msgs.length;\n })\n .then(_ => db.readDelLog(this.name, query))\n .then(dellog => {\n return dellog.forEach(rec => {\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n })\n .then(_ => {\n // DEBUG\n return count;\n });\n }\n\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n","/**\n * @file Definition of 'fnd' topic.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeToCache\n} from './utils.js';\n\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport default class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params - parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Check if the given tag is unique by asking the server.\n * @param {string} tag - tag to check.\n * @param {string} caller - identifier of the caller.\n * @returns {Promise} promise to be resolved with true if the tag is unique, false otherwise.\n */\n checkTagUniqueness(tag, caller) {\n return new Promise((resolve, reject) => {\n this.subscribe()\n .then(_ => this.setMeta({\n desc: {\n public: tag\n }\n }))\n .then(_ => this.getMeta(this.startMetaQuery().withTags().build()))\n .then(meta => {\n if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n resolve(true);\n }\n const tags = meta.tags.filter(t => t !== caller);\n resolve(tags.length == 0);\n })\n .catch(err => {\n reject(err);\n });\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Definition of 'me' topic.\n *\n * @copyright 2015-2026 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeObj\n} from './utils.js';\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport default class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is received.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just ignore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.val\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n case 'react':\n // Reaction to message.\n cont._processMetaReact(undefined, {\n mrrid: pres.id2 | 0,\n seq: pres.seq,\n user: pres.actor,\n val: pres.val\n });\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.topic = pres.src;\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overridden and throws an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} method - Validation method such as 'email' or 'tel'.\n * @param {string} value - Credential value to delete.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact - contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n\n /**\n * Pin topic to the top of the contact list.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to pin.\n * @param {boolean} [pin=false] - If true, pin the topic, otherwise unpin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinTopic(topic, pin) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot pin topic in inactive 'me' topic\"));\n }\n if (!Topic.isCommTopicName(topic)) {\n return Promise.reject(new Error(\"Invalid topic to pin\"));\n }\n\n const tpin = Array.isArray(this.private && this.private.tpin) ? this.private.tpin : [];\n const found = tpin.includes(topic);\n if ((pin && found) || (!pin && !found)) {\n // Nothing to do.\n return Promise.resolve(tpin);\n }\n\n if (pin) {\n // Add topic to the top of the pinned list.\n tpin.unshift(topic);\n } else {\n // Remove topic from the pinned list.\n tpin.splice(tpin.indexOf(topic), 1);\n }\n\n return this.setMeta({\n desc: {\n private: {\n tpin: tpin.length > 0 ? tpin : Const.DEL_CHAR\n }\n }\n });\n }\n\n /**\n * Get the rank of the pinned topic.\n * @memberof Tinode.TopicMe#\n * @param {string} topic - Name of the topic to check.\n *\n * @returns {number} numeric rank of the pinned topic in the range 1..N (N being the top,\n * N - the number of pinned topics) or 0 if not pinned.\n */\n pinnedTopicRank(topic) {\n if (!this.private || !this.private.tpin) {\n return 0;\n }\n const idx = this.private.tpin.indexOf(topic);\n return idx < 0 ? 0 : this.private.tpin.length - idx;\n }\n}\n","/**\n * @file Definition of a contact card, similar to vCard.\n *\n * @copyright 2025-2026 Tinode LLC.\n *\n * TheCard class represents a contact card with various fields such as full name,\n * photo, organization, communication methods, and birthday.\n */\n\n'use strict';\n\nimport {\n DEL_CHAR\n} from './config.js';\n\nconst THE_CARD_MIME_TYPE = 'text/x-the-card';\n\nexport default class TheCard {\n /**\n * Create a new contact card.\n * @param {string} fn - Full name.\n * @param {string} imageUrl - Avatar URL or data URL.\n * @param {string} imageMimeType - MIME type of the avatar image.\n * @param {string} note - Notes or comments about the contact.\n */\n constructor(fn, imageUrl, imageMimeType, note) {\n Object.assign(this, theCard(fn, imageUrl, imageMimeType, note) || {});\n }\n\n /**\n * Merge another card into this one.\n * @param {Object} that - Card object to merge.\n */\n merge(that) {\n Object.assign(this, that);\n }\n\n /**\n * Get the MIME type of the card.\n * @returns {string} The MIME type.\n */\n get contentType() {\n return THE_CARD_MIME_TYPE;\n }\n\n /**\n * Get the size of the card in bytes when serialized as JSON.\n * @returns {number} Size in bytes.\n */\n get size() {\n return JSON.stringify(this).length;\n }\n}\n\nTheCard.contentType = THE_CARD_MIME_TYPE;\n\n/**\n * Set the full name on a card.\n * @param {Object} card - The card object.\n * @param {string} fn - Full name to set.\n * @returns {Object} The updated card.\n */\nTheCard.setFn = function(card, fn) {\n fn = fn && fn.trim();\n card = card || {};\n card.fn = fn || undefined;\n return card;\n}\n\n/**\n * Get the full name from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} The full name or null if not set.\n */\nTheCard.getFn = function(card) {\n if (card && card.fn) {\n return card.fn;\n }\n return null;\n}\n\n/**\n * Set notes on a card.\n * @param {Object} card - The card object.\n * @param {string} note - Notes to set.\n * @returns {Object} The updated card.\n */\nTheCard.setNote = function(card, note) {\n note = note && note.trim();\n card = card || {};\n card.note = note ? note : DEL_CHAR;\n return card;\n}\n\n/**\n * Set photo/avatar on a card.\n * @param {Object} card - The card object.\n * @param {string} imageUrl - Image URL or data URL.\n * @param {string} imageMimeType - MIME type of the image.\n * @returns {Object} The updated card.\n */\nTheCard.setPhoto = function(card, imageUrl, imageMimeType) {\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n data: DEL_CHAR,\n ref: imageUrl\n };\n // Get mime type from URL, if not provided.\n if (!mimeType) {\n const ext = /\\.([a-z0-9]+)$/i.exec(imageUrl);\n if (ext) {\n const extLower = ext[1].toLowerCase();\n const mimeMap = {\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'bmp': 'image/bmp',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml'\n };\n mimeType = mimeMap[extLower] || null;\n }\n }\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n } else {\n card = card || {};\n card.photo = DEL_CHAR;\n }\n return card;\n}\n\n/**\n * Get photo URL from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} Photo URL or data URL, or null if not set.\n */\nTheCard.getPhotoUrl = function(card) {\n if (card && card.photo) {\n if (card.photo.ref && card.photo.ref != DEL_CHAR) {\n return card.photo.ref;\n } else if (card.photo.data && card.photo.data != DEL_CHAR) {\n return 'data:image/' + (card.photo.type || 'jpeg') + ';base64,' + card.photo.data;\n }\n }\n return null;\n}\n\n/**\n * Get organization name from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} Organization name or null if not set.\n */\nTheCard.getOrg = function(card) {\n if (card && card.org) {\n return card.org.fn || null;\n }\n return null;\n}\n\n/**\n * Set a phone number on a card, replacing any existing phone with the same type.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number.\n * @param {string} [type='voice'] - Type of phone number (e.g., 'voice', 'mobile', 'work').\n * @returns {Object} The updated card.\n */\nTheCard.setPhone = function(card, phone, type = 'voice') {\n return addOrSetComm(card, 'tel', phone, type, true);\n}\n\n/**\n * Set an email address on a card, replacing any existing email with the same type.\n * @param {Object} card - The card object.\n * @param {string} email - Email address.\n * @param {string} [type='home'] - Type of email (e.g., 'home', 'work').\n * @returns {Object} The updated card.\n */\nTheCard.setEmail = function(card, email, type = 'home') {\n return addOrSetComm(card, 'email', email, type, true);\n}\n\n/**\n * Set a Tinode ID on a card, replacing any existing ID with the same type.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode user ID.\n * @param {string} [type='home'] - Type of ID.\n * @returns {Object} The updated card.\n */\nTheCard.setTinodeID = function(card, tinodeID, type = 'home') {\n return addOrSetComm(card, 'tinode', tinodeID, type, true);\n}\n\n/**\n * Add a phone number to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number.\n * @param {string} [type='voice'] - Type of phone number.\n * @returns {Object} The updated card.\n */\nTheCard.addPhone = function(card, phone, type = 'voice') {\n return addOrSetComm(card, 'tel', phone, type, false);\n}\n\n/**\n * Add an email address to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} email - Email address.\n * @param {string} [type='home'] - Type of email.\n * @returns {Object} The updated card.\n */\nTheCard.addEmail = function(card, email, type = 'home') {\n return addOrSetComm(card, 'email', email, type, false);\n}\n\n/**\n * Add a Tinode ID to a card without replacing existing ones.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode user ID.\n * @param {string} [type='home'] - Type of ID.\n * @returns {Object} The updated card.\n */\nTheCard.addTinodeID = function(card, tinodeID, type = 'home') {\n return addOrSetComm(card, 'tinode', tinodeID, type, false);\n}\n\n/**\n * Remove phone number(s) from a card.\n * @param {Object} card - The card object.\n * @param {string} phone - Phone number to remove (optional).\n * @param {string} type - Type of phone to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearPhone = function(card, phone, type) {\n return clearComm(card, 'tel', phone, type);\n}\n\n/**\n * Remove email address(es) from a card.\n * @param {Object} card - The card object.\n * @param {string} email - Email to remove (optional).\n * @param {string} type - Type of email to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearEmail = function(card, email, type) {\n return clearComm(card, 'email', email, type);\n}\n\n/**\n * Remove Tinode ID(s) from a card.\n * @param {Object} card - The card object.\n * @param {string} tinodeID - Tinode ID to remove (optional).\n * @param {string} type - Type of ID to remove (optional).\n * @returns {Object} The updated card.\n */\nTheCard.clearTinodeID = function(card, tinodeID, type) {\n return clearComm(card, 'tinode', tinodeID, type);\n}\n\n/**\n * Get all communication methods of a specific protocol from a card.\n * @param {Object} card - The card object.\n * @param {string} proto - Protocol ('tel', 'email', 'tinode', 'http').\n * @returns {Array} Array of communication entries matching the protocol.\n */\nTheCard.getComm = function(card, proto) {\n if (card && Array.isArray(card.comm)) {\n return card.comm.filter(c => c.proto == proto);\n }\n return [];\n}\n\n/**\n * Get all email addresses from a card.\n * @param {Object} card - The card object.\n * @returns {Array} Array of email addresses.\n */\nTheCard.getEmails = function(card) {\n return TheCard.getComm(card, 'email').map(c => c.value);\n}\n\n/**\n * Get all phone numbers from a card.\n * @param {Object} card - The card object.\n * @returns {Array} Array of phone numbers.\n */\nTheCard.getPhones = function(card) {\n return TheCard.getComm(card, 'tel').map(c => c.value);\n}\n\n/**\n * Get the first Tinode ID from a card.\n * @param {Object} card - The card object.\n * @returns {string|null} The first Tinode ID or null if none.\n */\nTheCard.getFirstTinodeID = function(card) {\n const comms = TheCard.getComm(card, 'tinode');\n if (comms.length > 0) {\n return comms[0].value;\n }\n return null;\n}\n\n/**\n * Export a card as vCard 3.0 format string.\n * @param {Object} card - The card object to export.\n * @returns {string|null} vCard formatted string or null if card is empty.\n */\nTheCard.exportVCard = function(card) {\n if (!card) {\n return null;\n }\n\n let vcard = 'BEGIN:VCARD\\r\\nVERSION:3.0\\r\\n';\n\n if (card.fn) {\n vcard += `FN:${card.fn}\\r\\n`;\n }\n\n if (card.n) {\n vcard += `N:${card.n.surname || ''};${card.n.given || ''};${card.n.additional || ''};${card.n.prefix || ''};${card.n.suffix || ''}\\r\\n`;\n }\n\n if (card.org) {\n if (card.org.fn) {\n vcard += `ORG:${card.org.fn}\\r\\n`;\n }\n if (card.org.title) {\n vcard += `TITLE:${card.org.title}\\r\\n`;\n }\n }\n\n if (card.note && card.note != DEL_CHAR) {\n vcard += `NOTE:${card.note}\\r\\n`;\n }\n\n if (card.bday && card.bday.m && card.bday.d) {\n // Format as YYYY-MM-DD or --MM-DD if no year\n const year = card.bday.y ? String(card.bday.y).padStart(4, '0') : '--';\n const month = String(card.bday.m).padStart(2, '0');\n const day = String(card.bday.d).padStart(2, '0');\n vcard += `BDAY:${year}-${month}-${day}\\r\\n`;\n }\n\n if (card.photo) {\n if (card.photo.ref && card.photo.ref != DEL_CHAR) {\n vcard += `PHOTO;VALUE=URI:${card.photo.ref}\\r\\n`;\n } else if (card.photo.data && card.photo.data != DEL_CHAR) {\n vcard += `PHOTO;TYPE=${card.photo.type.toUpperCase()};ENCODING=b:${card.photo.data}\\r\\n`;\n }\n }\n\n if (Array.isArray(card.comm)) {\n card.comm.forEach(comm => {\n const types = comm.des.join(',').toUpperCase();\n if (comm.proto === 'tel') {\n vcard += `TEL;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'email') {\n vcard += `EMAIL;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'tinode') {\n vcard += `IMPP;TYPE=${types}:${comm.value}\\r\\n`;\n } else if (comm.proto === 'http') {\n vcard += `URL;TYPE=${types}:${comm.value}\\r\\n`;\n }\n });\n }\n\n vcard += 'END:VCARD\\r\\n';\n return vcard;\n}\n\n/**\n * Import a vCard formatted string and convert it to a card object.\n * Supports vCard 2.1 and 3.0 formats with various field encodings.\n * @param {string} vcardStr - vCard formatted string.\n * @returns {Object|null} Parsed card object or null if invalid.\n */\nTheCard.importVCard = function(vcardStr) {\n if (!vcardStr || typeof vcardStr !== 'string') {\n return null;\n }\n\n // Handle line folding: lines starting with space or tab are continuations\n // Also handle Quoted-Printable soft line breaks (line ending with =)\n const rawLines = vcardStr.split(/\\r\\n|\\n/);\n const lines = [];\n let currentLine = '';\n\n for (let i = 0; i < rawLines.length; i++) {\n const line = rawLines[i];\n if (line.startsWith(' ') || line.startsWith('\\t')) {\n // This is a vCard continuation of the previous line\n currentLine += line.substring(1);\n } else if (currentLine.endsWith('=')) {\n // This is a Quoted-Printable soft line break\n // Remove the trailing = and append the next line directly\n currentLine = currentLine.substring(0, currentLine.length - 1) + line;\n } else {\n if (currentLine) {\n lines.push(currentLine);\n }\n currentLine = line;\n }\n }\n if (currentLine) {\n lines.push(currentLine);\n }\n\n let card = {};\n // Temporary map to collect and dedupe comm entries\n const commMap = new Map(); // key: \"proto:value\", value: Set of types\n\n // Helper to unescape vCard text values (unescape \\, \\; \\\\ \\n)\n const unescapeValue = (val) => {\n return val.replace(/\\\\([,;\\\\n])/g, (match, char) => {\n if (char === 'n') return '\\n';\n return char;\n });\n };\n\n // Helper to decode Quoted-Printable encoding\n const decodeQuotedPrintable = (val) => {\n // Decode =XX sequences to bytes, then decode as UTF-8\n // First collect all bytes\n const bytes = [];\n let i = 0;\n while (i < val.length) {\n if (val[i] === '=' && i + 2 < val.length) {\n const hex = val.substring(i + 1, i + 3);\n if (/^[0-9A-F]{2}$/i.test(hex)) {\n bytes.push(parseInt(hex, 16));\n i += 3;\n } else {\n // Not a valid hex sequence, keep the character as-is\n bytes.push(val.charCodeAt(i));\n i++;\n }\n } else {\n bytes.push(val.charCodeAt(i));\n i++;\n }\n }\n\n // Decode UTF-8 bytes to string\n try {\n const uint8Array = new Uint8Array(bytes);\n return new TextDecoder('utf-8').decode(uint8Array);\n } catch (e) {\n // Fallback if TextDecoder is not available\n return val.replace(/=([0-9A-F]{2})/gi, (match, hex) => {\n return String.fromCharCode(parseInt(hex, 16));\n });\n }\n };\n\n lines.forEach(line => {\n const [keyPart, ...valueParts] = line.split(':');\n if (!keyPart || valueParts.length === 0) {\n return;\n }\n const value = valueParts.join(':');\n\n const keyParams = keyPart.split(';');\n const key = keyParams[0].trim().toUpperCase();\n\n // Check if QUOTED-PRINTABLE encoding is specified\n const isQuotedPrintable = keyParams.some(param =>\n param.trim().toUpperCase() === 'QUOTED-PRINTABLE' ||\n param.trim().toUpperCase() === 'ENCODING=QUOTED-PRINTABLE'\n );\n\n if (key === 'FN') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.fn = unescapeValue(processedValue);\n } else if (key === 'N') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n const parts = processedValue.split(';');\n card.n = {\n surname: parts[0] ? unescapeValue(parts[0]) : undefined,\n given: parts[1] ? unescapeValue(parts[1]) : undefined,\n additional: parts[2] ? unescapeValue(parts[2]) : undefined,\n prefix: parts[3] ? unescapeValue(parts[3]) : undefined,\n suffix: parts[4] ? unescapeValue(parts[4]) : undefined,\n };\n // Clean up undefined properties.\n Object.keys(card.n).forEach(key => card.n[key] === undefined && delete card.n[key]);\n if (Object.keys(card.n).length === 0) {\n delete card.n;\n }\n } else if (key === 'ORG') {\n // Multiple values are separated by semicolon. We only use the first one as distinct name.\n // The second one is usually the department, which we skip.\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n const parts = processedValue.split(';');\n card.org = card.org || {};\n card.org.fn = parts[0] ? unescapeValue(parts[0]) : undefined;\n if (!card.org.fn) delete card.org.fn;\n } else if (key === 'TITLE') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.org = card.org || {};\n card.org.title = processedValue ? unescapeValue(processedValue) : undefined;\n if (!card.org.title) delete card.org.title;\n } else if (key === 'NOTE') {\n let processedValue = value;\n if (isQuotedPrintable) {\n processedValue = decodeQuotedPrintable(processedValue);\n }\n card.note = unescapeValue(processedValue);\n } else if (key === 'BDAY') {\n // Parse birthday in various formats\n // Strip time if present (anything after T or space)\n let dateStr = value.split(/[T ]/)[0].trim();\n\n let year = null;\n let month = null;\n let day = null;\n\n // Remove hyphens for easier parsing\n const noHyphens = dateStr.replace(/-/g, '');\n\n if (noHyphens.length === 6 && /^\\d{6}$/.test(noHyphens)) {\n // YYMMDD format\n const yy = parseInt(noHyphens.substring(0, 2), 10);\n month = parseInt(noHyphens.substring(2, 4), 10);\n day = parseInt(noHyphens.substring(4, 6), 10);\n // If YY >= 35, it's 19XX, otherwise 20XX\n year = yy >= 35 ? 1900 + yy : 2000 + yy;\n } else if (dateStr.startsWith('--') || dateStr.startsWith('----')) {\n // --MMDD or ----MMDD format (no year)\n const cleaned = dateStr.replace(/^-+/, '');\n if (cleaned.length === 4 && /^\\d{4}$/.test(cleaned)) {\n month = parseInt(cleaned.substring(0, 2), 10);\n day = parseInt(cleaned.substring(2, 4), 10);\n } else if (cleaned.includes('-')) {\n const parts = cleaned.split('-');\n if (parts.length >= 2) {\n month = parseInt(parts[0], 10);\n day = parseInt(parts[1], 10);\n }\n }\n } else if (noHyphens.length === 8 && /^\\d{8}$/.test(noHyphens)) {\n // YYYYMMDD format\n year = parseInt(noHyphens.substring(0, 4), 10);\n month = parseInt(noHyphens.substring(4, 6), 10);\n day = parseInt(noHyphens.substring(6, 8), 10);\n } else if (dateStr.includes('-')) {\n // YYYY-MM-DD format\n const parts = dateStr.split('-');\n if (parts[0] && parts[0] !== '' && !/^-+$/.test(parts[0])) {\n year = parseInt(parts[0], 10);\n }\n if (parts.length >= 2) {\n month = parseInt(parts[1], 10);\n }\n if (parts.length >= 3) {\n day = parseInt(parts[2], 10);\n }\n }\n\n // Basic validation\n const isValidMonth = month && month >= 1 && month <= 12;\n const isValidDay = day && day >= 1 && day <= 31;\n const isValidYear = !year || (year >= 1800 && year <= 2200);\n\n if (isValidMonth && isValidDay && isValidYear) {\n card.bday = {\n m: month,\n d: day\n };\n if (year) {\n card.bday.y = year;\n }\n }\n } else if (key === 'PHOTO') {\n const params = keyPart.split(';').slice(1);\n let type = 'jpeg';\n let encoding = null;\n params.forEach(param => {\n const [pKey, pValue] = param.split('=');\n if (pKey && pKey.trim().toUpperCase() === 'TYPE') {\n type = pValue ? pValue.trim().toLowerCase() : 'jpeg';\n } else if (pKey && pKey.trim().toUpperCase() === 'ENCODING') {\n encoding = pValue ? pValue.trim().toLowerCase() : null;\n }\n });\n if (encoding === 'b') {\n card.photo = {\n type: type,\n data: value,\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n type: type,\n data: DEL_CHAR,\n ref: value\n };\n }\n } else if (key === 'TEL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `tel|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'EMAIL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `email|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'IMPP') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = value.startsWith('tinode:') ? `tinode|${value}` : `impp|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n } else if (key === 'URL') {\n // Extract all TYPE values (can be comma-separated or multiple TYPE= params)\n const typeParams = keyPart.split(';').filter(param => param.trim().toUpperCase().startsWith('TYPE='));\n const types = typeParams.flatMap(param => {\n // Split by first '=' only to get the value part\n const equalIndex = param.indexOf('=');\n const valuesPart = param.substring(equalIndex + 1);\n // Split by comma and clean up any 'TYPE=' prefix\n return valuesPart.split(',').map(t => {\n const cleaned = t.trim().toLowerCase();\n return cleaned.startsWith('type=') ? cleaned.substring(5) : cleaned;\n });\n }).filter(t => t !== 'internet'); // Skip 'internet' type\n\n const mapKey = `http|${value}`;\n if (!commMap.has(mapKey)) {\n commMap.set(mapKey, new Set());\n }\n types.forEach(t => commMap.get(mapKey).add(t));\n }\n });\n\n // Convert commMap to comm array\n if (commMap.size > 0) {\n card.comm = [];\n commMap.forEach((types, key) => {\n const [proto, value] = key.split('|', 2);\n card.comm.push({\n proto: proto,\n des: Array.from(types),\n value: value\n });\n });\n }\n\n return card;\n}\n\n/**\n * Check if a file type or name is a supported vCard format.\n * @param {string} type - MIME type of the file.\n * @param {string} name - File name.\n * @returns {boolean} True if the file is a vCard format.\n */\nTheCard.isFileSupported = function(type, name) {\n return type == 'text/vcard' ||\n (name || '').endsWith('.vcf') ||\n (name || '').endsWith('.vcard');\n}\n\nfunction theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[][;base64],\"?\n const matches = /^data:(image\\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);\n if (matches) {\n mimeType = matches[1];\n card.photo = {\n data: imageUrl.substring(imageUrl.indexOf(',') + 1),\n ref: DEL_CHAR\n };\n } else {\n card.photo = {\n data: DEL_CHAR,\n ref: imageUrl\n };\n }\n card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);\n }\n\n return card;\n}\n\nfunction addOrSetComm(card, proto, value, type, setOnly) {\n proto = proto && proto.trim();\n value = value && value.trim();\n if (proto && value) {\n card = card || {};\n card.comm = card.comm || [];\n if (setOnly) {\n // Remove existing entries with the same proto and type.\n card.comm = card.comm.filter(c => {\n if (c.proto != proto) return true;\n return !c.des.includes(type);\n });\n }\n card.comm.push({\n proto: proto,\n des: [type], // Always use array\n value: value\n });\n }\n return card;\n}\n\nfunction clearComm(card, proto, value, type) {\n if (card && Array.isArray(card.comm)) {\n card.comm = card.comm.filter(c => {\n if (c.proto != proto) return true;\n if (value && c.value != value) return true;\n if (type) {\n return !c.des.includes(type);\n }\n return false;\n });\n }\n return card;\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2026 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.25\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport TheCard from './the-card.js';\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\n// Re-export TheCard\nexport {\n TheCard\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolean} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format /\n this._appName = config.appName || \"Undefined\";\n\n // API Key.\n this._apiKey = config.apiKey;\n\n // Name and version of the browser.\n this._platform = config.platform || 'web';\n // Underlying OS.\n if (typeof navigator != 'undefined') {\n this._browser = getBrowserInfo(navigator.userAgent, navigator.product);\n this._hwos = navigator.platform;\n // This is the default language. It could be changed by client.\n this._humanLanguage = navigator.language || 'en-US';\n }\n\n Connection.logger = this.logger;\n Drafty.logger = this.logger;\n\n // WebSocket or long polling network connection.\n if (config.transport != 'lp' && config.transport != 'ws') {\n config.transport = detectTransport();\n }\n this._connection = new Connection(config, Const.PROTOCOL_VERSION, /* autoreconnect */ true);\n this._connection.onMessage = (data) => {\n // Call the main message dispatcher.\n this.#dispatchMessage(data);\n }\n\n // Ready to start sending.\n this._connection.onOpen = _ => this.#connectionOpen();\n this._connection.onDisconnect = (err, code) => this.#disconnected(err, code);\n\n // Wrapper for the reconnect iterator callback.\n this._connection.onAutoreconnectIteration = (timeout, promise) => {\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout, promise);\n }\n }\n\n this._persist = config.persist;\n // Initialize object regardless. It simplifies the code.\n this._db = new DBCache(this.logger, this.logger);\n\n if (this._persist) {\n // Create the persistent cache.\n // Store promises to be resolved when messages load into memory.\n const prom = [];\n this._db.initDatabase().then(_ => {\n // First load topics into memory.\n return this._db.mapTopics(data => {\n let topic = this.#cacheGet('topic', data.name);\n if (topic) {\n return;\n }\n if (data.name == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (data.name == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(data.name);\n }\n this._db.deserializeTopic(topic, data);\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n this._db.maxDelId(topic.name).then(clear => {\n topic._maxDel = Math.max(topic._maxDel, clear || 0);\n });\n // Topic loaded from DB is not new.\n delete topic._new;\n // Request to load messages and save the promise.\n prom.push(topic._loadMessages(this._db));\n });\n }).then(_ => {\n // Then load users.\n return this._db.mapUsers((data) => {\n this.#cachePut('user', data.uid, mergeObj({}, data.public));\n });\n }).then(_ => {\n // Now wait for all messages to finish loading.\n return Promise.all(prom);\n }).then(_ => {\n if (onComplete) {\n onComplete();\n }\n this.logger(\"Persistent cache initialized.\");\n }).catch(err => {\n if (onComplete) {\n onComplete(err);\n }\n this.logger(\"Failed to initialize persistent cache:\", err);\n });\n } else {\n this._db.deleteDatabase().then(_ => {\n if (onComplete) {\n onComplete();\n }\n });\n }\n }\n\n // Private methods.\n\n // Console logger. Babel somehow fails to parse '...rest' parameter.\n logger(str, ...args) {\n if (this._loggingEnabled) {\n const d = new Date();\n const dateString = ('0' + d.getUTCHours()).slice(-2) + ':' +\n ('0' + d.getUTCMinutes()).slice(-2) + ':' +\n ('0' + d.getUTCSeconds()).slice(-2) + '.' +\n ('00' + d.getUTCMilliseconds()).slice(-3);\n\n console.log('[' + dateString + ']', str, args.join(' '));\n }\n }\n\n // Generator of default promises for sent packets.\n #makePromise(id) {\n let promise = null;\n if (id) {\n promise = new Promise((resolve, reject) => {\n // Stored callbacks will be called when the response packet with this Id arrives\n this._pendingPromises[id] = {\n 'resolve': resolve,\n 'reject': reject,\n 'ts': new Date()\n };\n });\n }\n return promise;\n };\n\n // Resolve or reject a pending promise.\n // Unresolved promises are stored in _pendingPromises.\n #execPromise(id, code, onOK, errorText) {\n const callbacks = this._pendingPromises[id];\n if (callbacks) {\n delete this._pendingPromises[id];\n if (code >= 200 && code < 400) {\n if (callbacks.resolve) {\n callbacks.resolve(onOK);\n }\n } else if (callbacks.reject) {\n callbacks.reject(new CommError(errorText, code));\n }\n }\n }\n\n // Send a packet. If packet id is provided return a promise.\n #send(pkt, id) {\n let promise;\n if (id) {\n promise = this.#makePromise(id);\n }\n pkt = simplify(pkt);\n let msg = JSON.stringify(pkt);\n this.logger(\"out: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));\n try {\n this._connection.sendText(msg);\n } catch (err) {\n // If sendText throws, wrap the error in a promise or rethrow.\n if (id) {\n this.#execPromise(id, Connection.NETWORK_ERROR, null, err.message);\n } else {\n throw err;\n }\n }\n return promise;\n }\n\n // The main message dispatcher.\n #dispatchMessage(data) {\n // Skip empty response. This happens when LP times out.\n if (!data)\n return;\n\n this._inPacketCount++;\n\n // Send raw message to listener\n if (this.onRawMessage) {\n this.onRawMessage(data);\n }\n\n if (data === '0') {\n // Server response to a network probe.\n if (this.onNetworkProbe) {\n this.onNetworkProbe();\n }\n // No processing is necessary.\n return;\n }\n\n let pkt = JSON.parse(data, jsonParseHelper);\n if (!pkt) {\n this.logger(\"in: \" + data);\n this.logger(\"ERROR: failed to parse data\");\n } else {\n this.logger(\"in: \" + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : data));\n\n // Send complete packet to listener\n if (this.onMessage) {\n this.onMessage(pkt);\n }\n\n if (pkt.ctrl) {\n // Handling {ctrl} message\n if (this.onCtrlMessage) {\n this.onCtrlMessage(pkt.ctrl);\n }\n\n // Resolve or reject a pending promise, if any\n if (pkt.ctrl.id) {\n this.#execPromise(pkt.ctrl.id, pkt.ctrl.code, pkt.ctrl, pkt.ctrl.text);\n }\n setTimeout(_ => {\n if (pkt.ctrl.code == 205 && pkt.ctrl.text == 'evicted') {\n // User evicted from topic.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._resetSub();\n if (pkt.ctrl.params && pkt.ctrl.params.unsub) {\n topic._gone();\n }\n }\n } else if (pkt.ctrl.code < 300 && pkt.ctrl.params) {\n if (pkt.ctrl.params.what == 'data') {\n // code=208, all messages received: \"params\":{\"count\":11,\"what\":\"data\"},\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n topic._allMessagesReceived(pkt.ctrl.params.count);\n }\n } else if (pkt.ctrl.params.what == 'sub') {\n // code=204, the topic has no (refreshed) subscriptions.\n const topic = this.#cacheGet('topic', pkt.ctrl.topic);\n if (topic) {\n // Trigger topic.onSubsUpdated.\n topic._processMetaSubs([]);\n }\n }\n }\n }, 0);\n } else {\n setTimeout(_ => {\n if (pkt.meta) {\n // Handling a {meta} message.\n // Preferred API: Route meta to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.meta.topic);\n if (topic) {\n topic._routeMeta(pkt.meta);\n }\n\n if (pkt.meta.id) {\n this.#execPromise(pkt.meta.id, 200, pkt.meta, 'META');\n }\n\n // Secondary API: callback\n if (this.onMetaMessage) {\n this.onMetaMessage(pkt.meta);\n }\n } else if (pkt.data) {\n // Handling {data} message\n // Preferred API: Route data to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.data.topic);\n if (topic) {\n topic._routeData(pkt.data);\n }\n\n // Secondary API: Call callback\n if (this.onDataMessage) {\n this.onDataMessage(pkt.data);\n }\n } else if (pkt.pres) {\n // Handling {pres} message\n // Preferred API: Route presence to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.pres.topic);\n if (topic) {\n topic._routePres(pkt.pres);\n }\n\n // Secondary API - callback\n if (this.onPresMessage) {\n this.onPresMessage(pkt.pres);\n }\n } else if (pkt.info) {\n // {info} message - read/received notifications and key presses\n // Preferred API: Route {info}} to topic, if one is registered\n const topic = this.#cacheGet('topic', pkt.info.topic);\n if (topic) {\n topic._routeInfo(pkt.info);\n }\n\n // Secondary API - callback\n if (this.onInfoMessage) {\n this.onInfoMessage(pkt.info);\n }\n } else {\n this.logger(\"ERROR: Unknown packet received.\");\n }\n }, 0);\n }\n }\n }\n\n // Connection open, ready to start sending.\n #connectionOpen() {\n if (!this._expirePromises) {\n // Reject promises which have not been resolved for too long.\n this._expirePromises = setInterval(_ => {\n const err = new CommError(\"timeout\", 504);\n const expires = new Date(new Date().getTime() - Const.EXPIRE_PROMISES_TIMEOUT);\n for (let id in this._pendingPromises) {\n let callbacks = this._pendingPromises[id];\n if (callbacks && callbacks.ts < expires) {\n this.logger(\"Promise expired\", id);\n delete this._pendingPromises[id];\n if (callbacks.reject) {\n callbacks.reject(err);\n }\n }\n }\n }, Const.EXPIRE_PROMISES_PERIOD);\n }\n this.hello();\n }\n\n #disconnected(err, code) {\n this._inPacketCount = 0;\n this._serverInfo = null;\n this._authenticated = false;\n\n if (this._expirePromises) {\n clearInterval(this._expirePromises);\n this._expirePromises = null;\n }\n\n // Mark all topics as unsubscribed\n this.#cacheMap('topic', (topic, key) => {\n topic._resetSub();\n });\n\n // Reject all pending promises\n for (let key in this._pendingPromises) {\n const callbacks = this._pendingPromises[key];\n if (callbacks && callbacks.reject) {\n callbacks.reject(err);\n }\n }\n this._pendingPromises = {};\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n }\n\n // Get User Agent string\n #getUserAgent() {\n return this._appName + ' (' + (this._browser ? this._browser + '; ' : '') + this._hwos + '); ' + Const.LIBRARY;\n }\n\n // Generator of packets stubs\n #initPacket(type, topic) {\n switch (type) {\n case 'hi':\n return {\n 'hi': {\n 'id': this.getNextUniqueId(),\n 'ver': Const.VERSION,\n 'ua': this.#getUserAgent(),\n 'dev': this._deviceToken,\n 'lang': this._humanLanguage,\n 'platf': this._platform\n }\n };\n\n case 'acc':\n return {\n 'acc': {\n 'id': this.getNextUniqueId(),\n 'user': null,\n 'scheme': null,\n 'secret': null,\n 'tmpscheme': null,\n 'tmpsecret': null,\n 'login': false,\n 'tags': null,\n 'desc': {},\n 'cred': {}\n }\n };\n\n case 'login':\n return {\n 'login': {\n 'id': this.getNextUniqueId(),\n 'scheme': null,\n 'secret': null\n }\n };\n\n case 'sub':\n return {\n 'sub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'set': {},\n 'get': {}\n }\n };\n\n case 'leave':\n return {\n 'leave': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'unsub': false\n }\n };\n\n case 'pub':\n return {\n 'pub': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'noecho': false,\n 'head': null,\n 'content': {}\n }\n };\n\n case 'get':\n return {\n 'get': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'desc': {},\n 'sub': {},\n 'data': {}\n }\n };\n\n case 'set':\n return {\n 'set': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'desc': {},\n 'sub': {},\n 'tags': [],\n 'aux': {}\n }\n };\n\n case 'del':\n return {\n 'del': {\n 'id': this.getNextUniqueId(),\n 'topic': topic,\n 'what': null,\n 'delseq': null,\n 'user': null,\n 'hard': false\n }\n };\n\n case 'note':\n return {\n 'note': {\n // no id by design (except calls).\n 'topic': topic,\n 'what': null, // one of \"recv\", \"read\", \"kp\", \"call\"\n 'seq': undefined // the server-side message id acknowledged as received or read.\n }\n };\n\n default:\n throw new Error(`Unknown packet type requested: ${type}`);\n }\n }\n\n // Cache management\n #cachePut(type, name, obj) {\n this._cache[type + ':' + name] = obj;\n }\n #cacheGet(type, name) {\n return this._cache[type + ':' + name];\n }\n #cacheDel(type, name) {\n delete this._cache[type + ':' + name];\n }\n\n // Enumerate all items in cache, call func for each item.\n // Enumeration stops if func returns true.\n #cacheMap(type, func, context) {\n const key = type ? type + ':' : undefined;\n for (let idx in this._cache) {\n if (!key || idx.indexOf(key) == 0) {\n if (func.call(context, this._cache[idx], idx)) {\n break;\n }\n }\n }\n }\n\n // Make limited cache management available to topic.\n // Caching user.public only. Everything else is per-topic.\n #attachCacheToTopic(topic) {\n topic._tinode = this;\n\n topic._cacheGetUser = (uid) => {\n const pub = this.#cacheGet('user', uid);\n if (pub) {\n return {\n user: uid,\n public: mergeObj({}, pub)\n };\n }\n return undefined;\n };\n topic._cachePutUser = (uid, user) => {\n this.#cachePut('user', uid, mergeObj({}, user.public));\n };\n topic._cacheDelUser = (uid) => {\n this.#cacheDel('user', uid);\n };\n topic._cachePutSelf = _ => {\n this.#cachePut('topic', topic.name, topic);\n };\n topic._cacheDelSelf = _ => {\n this.#cacheDel('topic', topic.name);\n };\n }\n\n // On successful login save server-provided data.\n #loginSuccessful(ctrl) {\n if (!ctrl.params || !ctrl.params.user) {\n return ctrl;\n }\n // This is a response to a successful login,\n // extract UID and security token, save it in Tinode module\n this._myUID = ctrl.params.user;\n this._authenticated = (ctrl && ctrl.code >= 200 && ctrl.code < 300);\n if (ctrl.params && ctrl.params.token && ctrl.params.expires) {\n this._authToken = {\n token: ctrl.params.token,\n expires: ctrl.params.expires\n };\n } else {\n this._authToken = null;\n }\n\n if (this.onLogin) {\n this.onLogin(ctrl.code, ctrl.text);\n }\n\n return ctrl;\n }\n\n // Static methods.\n /**\n * Helper method to package account credential.\n *\n * @param {string | Credential} meth - validation method or object with validation data.\n * @param {string=} val - validation value (e.g. email or phone number).\n * @param {Object=} params - validation parameters.\n * @param {string=} resp - validation response.\n *\n * @returns {Array.} array with a single credential or null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys, slf.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\", \"slf\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param {Object} wsProvider - WebSocket provider, e.g. for nodeJS, require('ws').\n * @param {Object} xhrProvider - XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param {Object} idbProvider - indexedDB provider, e.g. for nodeJS, require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and its version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as opposite to being temporary locally assigned ID.\n * @param {number} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Parse user ID from a Tinode URL.\n *\n * @param {*} tinodeUrl\n * @returns {string} user ID extracted from the given Tinode URL or the original input if the URL cannot be parsed as tinode: URL.\n */\n static parseTinodeUrl(tinodeUrl) {\n if (!tinodeUrl || typeof tinodeUrl != 'string') {\n return null;\n }\n if (!tinodeUrl.startsWith('tinode:')) {\n return tinodeUrl;\n }\n const parts = tinodeUrl.substring(7).split(\"/\");\n if (parts.length < 2 || 'id' !== parts[parts.length - 2]) {\n return tinodeUrl;\n }\n return parts[parts.length - 1];\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param {Array.} tags - array of tags to modify.\n * @param {string} uniqueTag - tag to add, must be fully-qualified; if null or empty, no action is taken.\n * @returns {Array.} modified array of tags.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param {Array.} tags - array of tags to modify.\n * @param {string} prefix - prefix to remove.\n * @returns {Array.} array of tags without the ones with the given prefix.\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param {Array.} tags - array of tags to search.\n * @param {string} prefix - prefix to search for.\n * @returns {string} the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n /** Generates unique message IDs */\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.} tags - array of string tags for user discovery.\n * @property {string} scheme - Temporary authentication scheme for password reset.\n * @property {string} secret - Temporary authentication secret for password reset.\n * @property {Array.=} attachments - Array of references to out of band attachments used in account description.\n */\n /**\n * @typedef DefAcs\n * @type {Object}\n * @property {string=} auth - Access mode for me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.=} tags - Search tags.\n * @property {Object} aux - Auxiliary topic data.\n * @property {Array.=} attachments - URLs of out of band attachments used in parameters.\n */\n /**\n * @typedef SetDesc\n * @type {Object}\n * @property {DefAcs=} defacs - Default access mode.\n * @property {Object=} public - Free-form topic description, publically accessible.\n * @property {Object=} private - Free-form topic description accessible only to the owner.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n */\n /**\n * @typedef SetSub\n * @type {Object}\n * @property {string=} user - UID of the user affected by the request. Default (empty) - current user.\n * @property {string=} mode - User access mode, either requested or assigned dependent on context.\n */\n /**\n * Send a topic subscription request.\n *\n * @param {string} topic - Name of the topic to subscribe to.\n * @param {GetQuery=} getParams - Optional subscription metadata query\n * @param {SetParams=} setParams - Optional initialization parameters\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n subscribe(topicName, getParams, setParams) {\n const pkt = this.#initPacket('sub', topicName)\n if (!topicName) {\n topicName = Const.TOPIC_NEW;\n }\n\n pkt.sub.get = getParams;\n\n if (setParams) {\n if (setParams.sub) {\n pkt.sub.set.sub = setParams.sub;\n }\n\n if (setParams.desc) {\n const desc = setParams.desc;\n if (Tinode.isNewGroupTopicName(topicName)) {\n // Full set.desc params are used for new topics only\n pkt.sub.set.desc = desc;\n } else if (Tinode.isP2PTopicName(topicName) && desc.defacs) {\n // Use optional default permissions only.\n pkt.sub.set.desc = {\n defacs: desc.defacs\n };\n }\n }\n\n // See if external objects were used in topic description.\n if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {\n pkt.extra = {\n attachments: setParams.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n\n if (setParams.tags) {\n pkt.sub.set.tags = setParams.tags;\n }\n if (setParams.aux) {\n pkt.sub.set.aux = setParams.aux;\n }\n }\n return this.#send(pkt, pkt.sub.id);\n }\n\n /**\n * Detach and optionally unsubscribe from the topic\n *\n * @param {string} topic - Topic to detach from.\n * @param {boolean} unsub - If true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.=} attachments - array of URLs with attachments.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publishMessage(pub, attachments) {\n // Make a shallow copy. Needed in order to clear locally-assigned temp values;\n pub = Object.assign({}, pub);\n pub.seq = undefined;\n pub.from = undefined;\n pub.ts = undefined;\n const msg = {\n pub: pub,\n };\n if (attachments) {\n msg.extra = {\n attachments: attachments.filter(ref => isUrlRelative(ref))\n };\n }\n return this.#send(msg, pub.id);\n }\n\n /**\n * Out of band notification: notify topic that an external (push) notification was recived by the client.\n *\n * @param {object} data - notification payload.\n * @param {string} data.what - notification type, 'msg', 'read', 'sub'.\n * @param {string} data.topic - name of the updated topic.\n * @param {number=} data.seq - seq ID of the affected message.\n * @param {string=} data.xfrom - UID of the sender.\n * @param {object=} data.given - new subscription 'given', e.g. 'ASWP...'.\n * @param {object=} data.want - new subscription 'want', e.g. 'RWJ...'.\n */\n oobNotification(data) {\n this.logger('oob: ' + (this._trimLongStrings ? JSON.stringify(data, jsonLoggerHelper) : data));\n\n switch (data.what) {\n case 'msg':\n if (!data.seq || data.seq < 1 || !data.topic) {\n // Server sent invalid data.\n break;\n }\n\n if (!this.isConnected()) {\n // Let's ignore the message if there is no connection: no connection means there are no open\n // tabs with Tinode.\n break;\n }\n\n const topic = this.#cacheGet('topic', data.topic);\n if (!topic) {\n // TODO: check if there is a case when a message can arrive from an unknown topic.\n break;\n }\n\n if (topic.isSubscribed()) {\n // No need to fetch: topic is already subscribed and got data through normal channel.\n break;\n }\n\n if (topic.maxMsgSeq() < data.seq) {\n if (topic.isChannelType()) {\n topic._updateReceived(data.seq, 'fake-uid');\n }\n\n // New message.\n if (data.xfrom && !this.#cacheGet('user', data.xfrom)) {\n // Message from unknown sender, fetch description from the server.\n // Sending asynchronously without a subscription.\n this.getMeta(data.xfrom, new MetaGetBuilder().withDesc().build()).catch(err => {\n this.logger(\"Failed to get the name of a new sender\", err);\n });\n }\n\n topic.subscribe(null).then(_ => {\n return topic.getMeta(new MetaGetBuilder(topic).withLaterData(24).withLaterDel(24).build());\n }).then(_ => {\n // Allow data fetch to complete and get processed successfully.\n topic.leaveDelayed(false, 1000);\n }).catch(err => {\n this.logger(\"On push data fetch failed\", err);\n }).finally(_ => {\n this.getMeTopic()._refreshContact('msg', topic);\n });\n }\n break;\n\n case 'read':\n this.getMeTopic()._routePres({\n what: 'read',\n seq: data.seq\n });\n break;\n\n case 'sub':\n if (!this.isMe(data.xfrom)) {\n // TODO: handle updates from other users.\n break;\n }\n\n const mode = {\n given: data.modeGiven,\n want: data.modeWant\n };\n const acs = new AccessMode(mode);\n const pres = (!acs.mode || acs.mode == AccessMode._NONE) ?\n // Subscription deleted.\n {\n what: 'gone',\n src: data.topic\n } :\n // New subscription or subscription updated.\n {\n what: 'acs',\n src: data.topic,\n dacs: mode\n };\n this.getMeTopic()._routePres(pres);\n break;\n\n default:\n this.logger(\"Unknown push type ignored\", data.what);\n }\n }\n\n /**\n * @typedef GetOptsType\n * @type {Object}\n * @property {Date=} ims - \"If modified since\", fetch data only it was was modified since stated date.\n * @property {number=} limit - Maximum number of results to return. Ignored when querying topic description.\n */\n\n /**\n * @typedef GetDataType\n * @type {Object}\n * @property {number=} since - Load messages with seq ID equal or greater than this value.\n * @property {number=} before - Load messages with seq ID lower than this number.\n * @property {number=} limit - Maximum number of results to return.\n * @property {Array.=} range - Ranges of seq IDs to fetch.\n */\n\n /**\n * @typedef GetQuery\n * @type {Object}\n * @property {GetOptsType=} desc - If provided (even if empty), fetch topic description.\n * @property {GetOptsType=} sub - If provided (even if empty), fetch topic subscriptions.\n * @property {GetDataType=} data - If provided (even if empty), get messages.\n */\n\n /**\n * Request topic metadata\n *\n * @param {string} topic - Name of the topic to query.\n * @param {GetQuery} params - Parameters of the query. Use {@link Tinode.MetaGetBuilder} to generate.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n getMeta(topic, params) {\n const pkt = this.#initPacket('get', topic);\n\n pkt.get = mergeObj(pkt.get, params);\n\n return this.#send(pkt, pkt.get.id);\n }\n\n /**\n * Update topic's metadata: description, subscribtions.\n *\n * @param {string} topic - Topic to update.\n * @param {SetParams} params - topic metadata to update.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n setMeta(topic, params) {\n const pkt = this.#initPacket('set', topic);\n const what = [];\n\n if (params) {\n ['desc', 'sub', 'tags', 'cred', 'aux', 'react'].forEach(key => {\n if (params.hasOwnProperty(key)) {\n what.push(key);\n pkt.set[key] = params[key];\n }\n });\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n if (what.length == 0) {\n return Promise.reject(new Error(\"Invalid {set} parameters\"));\n }\n\n return this.#send(pkt, pkt.set.id);\n }\n\n /**\n * Range of message IDs.\n *\n * @typedef SeqRange\n * @type {Object}\n * @property {number} low - low end of the range, inclusive (closed).\n * @property {number=} hi - high end of the range, exclusive (open).\n */\n /**\n * Delete some or all messages in a topic.\n *\n * @param {string} topic - Topic name to delete messages from.\n * @param {Array.} list - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delMessages(topic, ranges, hard) {\n const pkt = this.#initPacket('del', topic);\n\n pkt.del.what = 'msg';\n pkt.del.delseq = ranges;\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete the topic alltogether. Requires Owner permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {boolean} hard - hard-delete topic.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delTopic(topicName, hard) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'topic';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete subscription. Requires Share permission.\n *\n * @param {string} topicName - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delSubscription(topicName, user) {\n const pkt = this.#initPacket('del', topicName);\n pkt.del.what = 'sub';\n pkt.del.user = user;\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Delete credential. Always sent on 'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {number} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt);\n }\n\n /**\n * Send a 'react' note to indicate the user reacted to (or removed reaction from) a message.\n *\n * @param {string} topicName - Name of the topic where the message to react to was posted.\n * @param {int} seq - ID of the message to react to.\n * @param {string} emo - Emoji string to add as reaction, or Tinode.DEL_CHAR to remove reaction.\n */\n react(topicName, seq, emo) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'react';\n pkt.note.payload = {\n emo\n };\n this.#send(pkt);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name - name of the value to return.\n * @param {Object} defaultValue - value to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name - name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name - name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequent messages to server instructing it to send acknowledgements.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn acknowledgements on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = Const.MAX_MESSAGE_SIZE;\nTinode.MAX_SUBSCRIBER_COUNT = Const.MAX_SUBSCRIBER_COUNT;\nTinode.MIN_TAG_LENGTH = Const.MIN_TAG_LENGTH;\nTinode.MAX_TAG_LENGTH = Const.MAX_TAG_LENGTH;\nTinode.MAX_TAG_COUNT = Const.MAX_TAG_COUNT;\nTinode.MAX_FILE_UPLOAD_SIZE = Const.MAX_FILE_UPLOAD_SIZE;\nTinode.REQ_CRED_VALIDATORS = Const.REQ_CRED_VALIDATORS;\nTinode.MSG_DELETE_AGE = Const.MSG_DELETE_AGE;\nTinode.ICE_SERVERS = Const.ICE_SERVERS;\nTinode.REACTION_LIST = Const.REACTION_LIST;\n\n// Tinode URI topic ID prefix, 'scheme://[host]/path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:///id/';\nTinode.URI_TOPIC_ALIAS_PREFIX = 'tinode:///alias/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n"],"names":["root","factory","exports","module","define","amd","this","DRAFTY_MIME_TYPE","DRAFTY_FR_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","name","start","end","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","val","test","url","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","undefined","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","TC","VC","VD","base64toObjectUrl","b64","contentType","logger","bin","atob","length","buf","ArrayBuffer","arr","Uint8Array","i","charCodeAt","URL","createObjectURL","Blob","type","err","message","base64toDataUrl","DECORATORS","open","_","close","data","props","href","target","id","act","ref","mime","Drafty","src","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","fn","state","preview","premime","poster","preref","txt","fmt","ent","chunkify","line","spans","chunks","span","at","push","chunk","tp","chld","children","toSpanTree","tree","last","draftyToTree","doc","Array","isArray","text","len","key","attachments","forEach","includes","stringToGraphemes","sort","a","b","diff","indexOf","graphemes","spansToTree","treeTopDown","node","child","parent","addNode","n","map","segment","join","att","subspans","inner","tag","treeToDrafty","keymap","c","Object","keys","newKey","transformer","context","dst","call","treeBottomUp","formatter","index","stack","values","pop","shortenTree","limit","tail","lightEntity","allow","copyEntData","lTrim","trimStart","shift","attachmentsToEnd","isFormResponseType","concat","draftify","startAt","plain","ranges","drafty","light","entries","dc","isEmptyObject","obj","toGraphemeValues","segments","indices","result","graphemeIndex","charIndex","graphemeIndices","correctAt","str","from","init","plainText","parse","content","lines","split","entityMap","entityIndex","blx","entities","block","original","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","spannify","match","extracted","entity","offset","unique","idx","filter","el","extractEntities","ele","s","correctLen","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","params","assign","quote","header","uid","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","appendButton","attachJSON","appendTheCard","theCardData","UNSAFE_toHTML","format","shorten","forwardedContent","replyContent","startsWith","forwarding","toPlainText","isPlainText","toMarkdown","def","isValid","txt_type","hasAttachments","callback","count","hasEntities","styles","sanitizeEntities","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","mimeType","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","value","AccessMode","constructor","acs","given","decode","want","mode","side","flag","Error","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_GRP","LOCAL_SEQID","DEL_CHAR","TAG_ALIAS","REACTION_LIST","CommError","code","super","jsonParseHelper","date","Date","isNaN","isUrlRelative","isValidDate","getTime","mergeObj","console","warn","mergeToCache","cache","newval","simplify","getOwnPropertyNames","normalizeRanges","maxSeq","r1","r2","low","hi","reduce","out","prev","Math","max","listToRanges","list","WebSocketProvider","XHRProvider","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","Connection","static","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","setNetworkProviders","wsProvider","xhrProvider","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","clearTimeout","timeout","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","_lpURL","_poller","_sender","lp_poller","url_","resolve","poller","promiseCompleted","onreadystatechange","evt","readyState","status","pkt","JSON","responseText","ctrl","sid","send","onOpen","onMessage","onDisconnect","abort","sender","lp_sender","OPEN","conn","onerror","onopen","onclose","onmessage","NETWORK_ERROR","DB_NAME","IDBProvider","DB","db","disabled","onError","source","trx","transaction","event","error","objectStore","getAll","onsuccess","topic","initDatabase","req","onversionchange","onupgradeneeded","objectStoreNames","contains","createObjectStore","keyPath","dellog","indexNames","createIndex","deleteDatabase","onblocked","isReady","updTopic","oncomplete","put","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","updUser","pub","arguments","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","mapSubscriptions","addMessage","add","updMessageStatus","seq","_status","updMessageReact","react","remMessages","to","range","readMessages","query","msgs","since","before","openCursor","cursor","continue","addDelLog","delId","clear","readDelLog","entry","maxDelId","f","tags","_tags","setAccessMode","read","unread","getAccessMode","setDatabaseProvider","idbProvider","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","relUrl","location","origin","searchParams","substring","addURLParam","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","updated","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withDataRanges","withDataList","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withAux","withDel","withLaterDel","_maxDel","extract","build","CBuffer","buffer","compare_","unique_","elem","exact","pivot","found","splice","getAt","getLast","findLast","insert","delAt","delRange","reset","startIdx","beforeIdx","min","find","nearest","isEmpty","Topic","callbacks","created","touched","private","trusted","recv","mrrid","_users","_queuedSeqId","Const","_noEarlierMsgs","_mrrSeen","_recvNotificationTimer","_credentials","_aux","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onAuxUpdated","onReact","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isSelfTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","head","replace","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","gaps","newer","startMetaQuery","_loadMessages","msgHasMoreMessages","getPinnedMessages","pins","aux","remains","setMeta","t","trim","toLowerCase","item","pos","ary","normalizeArray","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","_processMetaAux","_processMetaReact","subscriber","am","invite","archive","arch","pinMessage","pin","pinned","changed","pinTopic","pinnedTopicRank","emo","msgMyReaction","reactions","vals","getServerParam","markReactionsSeen","_refreshContact","delMessages","hard","tosend","del","rec","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","noteRecv","noteRead","noteKeyPress","noteRecording","noteUpload","types","payload","oldVal","doUpdate","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","alias","origSeq","versions","messages","sinceId","beforeId","unused1","unused2","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgReactions","users","hasUnseenReactions","gap","p","expected","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isSelfType","isChannelType","isGroupType","isCommType","isMe","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","vc","maxReact","_routeInfo","_routeMeta","meta","_processDelMessages","delseq","_routePres","pres","online","isTopicCached","id2","dacs","info","subs","subcnt","_updateCachedUser","creds","_handleReactionDiff","delta","reacts","findIndex","existing","userIdx","emoIndex","oneReaction","_diff","seqIds","mr","_allMessagesReceived","_maxReact","cached","_cachePutUser","_updateReceived","TopicFnd","_contacts","updateCount","indexBy","getPrototypeOf","checkTagUniqueness","caller","contacts","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","cacheRemTopic","getTopic","cr","meth","done","resp","cacheGetTopic","tgt","ua","actor","dummy","delCredential","method","getContact","getCredentials","tpin","unshift","THE_CARD_MIME_TYPE","TheCard","imageUrl","imageMimeType","card","matches","photo","theCard","merge","that","stringify","addOrSetComm","proto","setOnly","comm","des","clearComm","IndexedDBProvider","b64EncodeUnicode","btoa","encodeURIComponent","p1","String","fromCharCode","jsonBuildHelper","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","rfc3339DateString","jsonLoggerHelper","setFn","getFn","setNote","setPhoto","ext","getPhotoUrl","getOrg","org","setPhone","phone","setEmail","email","setTinodeID","tinodeID","addPhone","addEmail","addTinodeID","clearPhone","clearEmail","clearTinodeID","getComm","getEmails","getPhones","getFirstTinodeID","comms","exportVCard","vcard","surname","additional","prefix","suffix","bday","year","y","padStart","month","day","importVCard","vcardStr","rawLines","currentLine","commMap","Map","unescapeValue","char","decodeQuotedPrintable","bytes","hex","uint8Array","TextDecoder","keyPart","valueParts","keyParams","isQuotedPrintable","some","param","processedValue","dateStr","noHyphens","yy","cleaned","encoding","pKey","pValue","flatMap","equalIndex","mapKey","has","Set","isFileSupported","WebSocket","XMLHttpRequest","indexedDB","chars","global","input","output","charCode","bc","bs","DBCache","initForNonBrowserApp","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","getBrowserInfo","userAgent","language","detectTransport","promise","persist","all","args","dateString","log","onOK","errorText","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","setInterval","expires","hello","clearInterval","func","_cacheDelUser","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","parseTinodeUrl","tinodeUrl","isValidTagValue","tagSplit","splitAt","setUniqueTag","uniqueTag","clearTagPrefix","tagByPrefix","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","MSG_DELETE_AGE","ICE_SERVERS","URI_TOPIC_ID_PREFIX","URI_TOPIC_ALIAS_PREFIX","TAG_EMAIL","TAG_PHONE"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js b/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js index 491990e4..eebcd3d1 100644 --- a/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js +++ b/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js @@ -384,15 +384,6 @@ function formatNumber(input, format, options, metadata) { options = DEFAULT_OPTIONS; } metadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_2__["default"](metadata); - - // Normally, the `input` object is supposed to be a `PhoneNumber` class instance. - // Also, according to the `PhoneNumber` class source code, `country` can't be "001". - // It means that normally `input.country` or `input.countryCallingCode` is supposed - // to be present because either of the two is always required to exist in a `PhoneNumber` instance. - // This means that realistically, it's gonna step into either the first `if` - // or the following `else if`, and normally it won't even reach the legacy-compatibility - // `else return input.phone || ''` part. - // So normally, it won't ever return an empty string here. if (input.country && input.country !== '001') { // Validate `input.country`. if (!metadata.hasCountry(input.country)) { @@ -410,10 +401,8 @@ function formatNumber(input, format, options, metadata) { var number; switch (format) { case 'NATIONAL': - // Normally, the `input` object is supposed to be a `PhoneNumber` class instance, - // and a `PhoneNumber` class instance is always required to have a `nationalNumber`. - // This means that the `if (!nationalNumber)` below is just for legacy-compatibility - // and it normally can't really happen, so normally it won't ever return an empty string here. + // Legacy argument support. + // (`{ country: ..., phone: '' }`) if (!nationalNumber) { return ''; } @@ -442,16 +431,11 @@ function formatNumber(input, format, options, metadata) { // Not saying that this IDD formatter replicates it 1:1, but it seems to work. // Who would even need to format phone numbers in IDD format anyway? case 'IDD': - // If the required `fromCountry` parameter is not passed, it will return `undefined`. if (!options.fromCountry) { return; // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.') } var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata); - // If the country of the phone number doesn't support IDD calling, it will return `undefined`. - if (!formattedNumber) { - return; - } return addExtension(formattedNumber, input.ext, metadata, options.formatExtension); default: throw new Error("Unknown \"format\" argument passed to \"formatNumber()\": \"".concat(format, "\"")); @@ -1827,8 +1811,8 @@ __webpack_require__.r(__webpack_exports__); */ var SINGLE_IDD_PREFIX_REG_EXP = /^[\d]+(?:[~\u2053\u223C\uFF5E][\d]+)?$/; -// If the `country` supports IDD calling, it returns a preferred IDD prefix. -// If the `country` doesn't support IDD calling, it returns `undefined`. +// For regions that have multiple IDD prefixes +// a preferred IDD prefix is returned. function getIddPrefix(country, callingCode, metadata) { var countryMetadata = new _metadata_js__WEBPACK_IMPORTED_MODULE_0__["default"](metadata); countryMetadata.selectNumberingPlan(country, callingCode); diff --git a/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js.map b/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js.map index f1d626d0..c8407326 100644 --- a/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js.map +++ b/umd/vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js.map @@ -1 +1 @@ -{"version":3,"file":"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js","mappings":";;;;;;;;;;;;;AAAA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7Q,iCAAiC;AACjC,+BAA+B;AAC/B,4CAA4C,uEAAuE,mGAAmG;AACtN,qCAAqC,yGAAyG;AAC9I,2BAA2B,qHAAqH,gDAAgD,eAAe,4CAA4C,2CAA2C,cAAc;AACpT,+BAA+B,uDAAuD,yDAAyD,mDAAmD,uGAAuG,oBAAoB,+BAA+B,qBAAqB,qBAAqB,sEAAsE,wDAAwD,eAAe,kEAAkE,iCAAiC;AACtnB,+BAA+B,kFAAkF,gBAAgB,oBAAoB,oCAAoC;AACzL,uCAAuC,MAAM,qFAAqF,MAAM,aAAa,2EAA2E,aAAa;AAC7O,gCAAgC,MAAM,oEAAoE,YAAY;AACtH,iCAAiC,kGAAkG,4BAA4B;AAC/J,8BAA8B,+FAA+F,iDAAiD;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;AACjC,sC;;;;;;;;;;;;;;;;;;;;;;ACpCA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,yBAAyB,wBAAwB,oCAAoC,yCAAyC,kCAAkC,0DAA0D,0BAA0B;AACpP,4BAA4B,gBAAgB,sBAAsB,OAAO,kDAAkD,sDAAsD,8BAA8B,mJAAmJ,qEAAqE,KAAK;AAC5a,oCAAoC,oEAAoE,0DAA0D;AAClK,iCAAiC;AACjC,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAClN;AACZ;AACN;AACc;AACgC;AACR;AAClC;AACN;AACvC;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAQ,oBAAoB,gEAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,kCAAkC,iFAAyB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,8DAAgB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,aAAa,qFAA6B;AAC1C;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAgB;AAC7B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAa;AAC1B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,yBAAyB,oDAAQ;AACjC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,qEAAa;AAC1B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,sDAAY,wDAAwD,cAAc;AAC/F;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACiC;AAClC;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;;;;;ACvMA;AACO;;AAEP;AACA;AACO;;AAEP;AACO;;AAEP;AACA;AACO;;AAEP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACA;AACP;AACA,qC;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;;AAE2D;AACgC;AAC3B;AACX;AACA;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,6CAA6C,eAAe;AAC5D;AACA,YAAY,oCAAoC,qBAAqB,KAAK;AAC1E,YAAY,oCAAoC;AAChD;AACA,YAAY,oBAAoB,4IAA4I,8BAA8B;AAC1M,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,sBAAsB;AACtB,IAAI;AACJ;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kEAAa;AAC1B;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uFAA+B;AACxC;AACA;AACA;AACA;AACA,GAAG;AACH;AACO;AACP;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uEAAe;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,+BAA+B,mEAAqB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;;;;;;;;;AChNA,gCAAgC;AAChC,8BAA8B;AAC9B,uCAAuC,kGAAkG,iBAAiB,wCAAwC,MAAM,yCAAyC,6BAA6B,UAAU,YAAY,kEAAkE,WAAW,YAAY,iBAAiB,UAAU,MAAM,iFAAiF,UAAU,oBAAoB;AAC7gB,8BAA8B;AAC9B,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AAC9E;;AAE3D;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,eAAe;AACtC;AACO;AACP;AACA;;AAEA;AACA;AACA,oEAAoE,YAAY,4BAA4B;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,mEAAmB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,QAAQ,KAAK,qBAAqB;AAC9C,YAAY,QAAQ;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,mC;;;;;;;;;;;;;;;ACxEoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf,uDAAuD,4DAAiB;AACxE;AACA,4D;;;;;;;;;;;;;;;;;ACnCsC;AACK;AAC5B;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2DAAW;AACpC,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6C;;;;;;;;;;;;;;;AC/GkD;;AAElD;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,qBAAqB,uDAAY,KAAK,yBAAyB;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACe;AACf;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA,aAAa,QAAQ;AACrB;AACA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,4CAA4C,EAAE,EAAE;;AAEhD,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kD;;;;;;;;;;;;;;;AC9FiE;;AAEjE;AACA;AACA,sCAAsC,sEAAsB;;AAE5D;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;;;;;;;;;;;;;;;;;AC7BiD;AACkG;AAC7G;AACoB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,gFAAgF;AACvG;AACA,iBAAiB,+CAA+C;AAChE;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8DAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,oCAAoC,+GAA+D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kEAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qD;;;;;;;;;;;;;;;;;;AC5IsC;AACa;AACY;AACR;AACS;;AAEhE;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,6CAA6C;AACpE;AACe;AACf,uDAAuD,mEAAqB;AAC5E;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA,gCAAgC,qEAAqB;AACrD;AACA,iCAAiC,qEAAqB;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAe,sDAAsD,+DAAe,qEAAqE,iEAAiB;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2F;;;;;;;;;;;;;;;;AC9CkK;AACxH;;AAE1C;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB;AACA;AACe;AACf;AACA,qBAAqB,mEAAmB;AACxC,OAAO,4EAAmB;AAC1B,cAAc,sDAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA,mCAAmC,8DAAS;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qDAAqD,oEAAe;AACpE;AACA;AACA;AACA;AACA;AACA,qDAAqD,oEAAe;AACpE,MAAM;AACN;AACA;AACA,oDAAoD,2EAAsB;AAC1E;AACA;;AAEA;AACA;AACA;AACA,8CAA8C,6EAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mF;;;;;;;;;;;;;;;;;;AChEuH;AACpE;AACI;AACY;;AAEnE;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,UAAU;AACtB,YAAY,QAAQ,GAAG,8CAA8C;AACrE;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iGAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uEAAuB;AACzC;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+DAAe,6DAA6D,+DAAe;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,iEAAiB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iD;;;;;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY,QAAQ,GAAG,sEAAsE;AAC7F;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6E;;;;;;;;;;;;;;;;;;;;ACrGA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAIyB;AAClB;AACP;AACA,uCAAuC,uDAAY;AACnD,gGAAgG,uDAAY;;AAE5G;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,uDAAY;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACA,+BAA+B;AAC/B,iCAAiC;;AAExC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,aAAa;AACzB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+C;;;;;;;;;;;;;;;;ACjFqF;;AAErF;AACA;AACA;AACA;AACO;AACQ;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gFAAgC;AAC3C;AACA;AACA;AACA,2D;;;;;;;;;;;;;;;AChCyE;AACzE;;AAEA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0EAA0B;AACnC;AACA;AACA,GAAG;AACH;AACA,mD;;;;;;;;;;;;;;;;AC5BA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACnG;AACS;;AAE/C;AACA;AACe;AACf;AACA;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;;AAEA,0EAA0E,4BAA4B;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAa;AAC1B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sD;;;;;;;;;;;;;;;AC9EsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACe;AACf,4BAA4B,oDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC;;;;;;;;;;;;;;;;;ACzBA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACnG;AACa;AACnD;;AAEA;AACe;AACf,yBAAyB;AACzB;AACA;;AAEA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;AACzB;AACA;;AAEA;AACA;;AAEA;AACA,OAAO,+DAAe;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,4BAA4B;AACvH;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAe;AACxB;AACA,yC;;;;;;;;;;;;;;;ACnFsC;;AAEtC;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB;AACe;AACf,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yD;;;;;;;;;;;;;;AC3BA,0BAA0B;AACX;AACf;AACA;AACA,oC;;;;;;;;;;;;;;;;;;;ACJkG;AACvB;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA,sCAAsC,GAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,4CAA4C,uDAAY,MAAM,IAAI,6DAAkB,KAAK;AACzF;AACA;AACA;AACA;AACO,+BAA+B,qDAAU,MAAM,IAAI,kBAAkB,4DAAiB,gBAAgB,uDAAY,YAAY,GAAG,UAAU,4DAAiB,GAAG,uDAAY;;AAElL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAU,MAAM,IAAI,kBAAkB,4DAAiB,gBAAgB,uDAAY,YAAY,IAAI;AAC1J;AACP;AACA,QAAQ,gFAAsB;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf,0BAA0B,6DAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,+C;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA;AACA,2C;;;;;;;;;;;;;;ACXA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA,YAAY,GAAG;AACf,YAAY,GAAG;AACf,YAAY;AACZ;AACe;AACf;AACA,kEAAkE,4BAA4B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;AC5BA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,4BAA4B;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;AClHsC;AACS;AAC/C,gDAAgD,uDAAY;AAC7C;AACf;AACA;AACA;AACA;AACA,4BAA4B,oDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0C;;;;;;;;;;;;;;;;;AC5BqC;AAC0B;;AAE/D;AACA;AACA;AACA,qCAAqC,eAAe;AACpD;AACA,gBAAgB,oCAAoC,IAAI,KAAK;AAC7D,gBAAgB,oCAAoC;AACpD;AACA,YAAY,oBAAoB,4IAA4I,8BAA8B;AAC1M,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACO;AACP;AACA,UAAU,yEAAiB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;;;;;;;;;;;AC5EqC;AACsB;AACJ;;AAEvD;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA,gBAAgB,oCAAoC,IAAI,KAAK;AAC7D,gBAAgB,oCAAoC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACe;AACf,yBAAyB;AACzB;AACA;AACA,iBAAiB,oDAAQ;AACzB;;AAEA;AACA;AACA;AACA,WAAW,qEAAa;AACxB;;AAEA;AACA;AACA;AACA,SAAS,uEAAe;AACxB;AACA,mC;;;;;;;;;;;;;;;;;;;;ACxDA,6BAA6B;AAC7B,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,iCAAiC;AACjC,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7N;AACH;;AAE7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C,OAAO,gEAAQ,eAAe,gEAAQ;AACtC,iLAAiL,gEAAQ,oCAAoC,0CAA0C;AACvQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM,SAAS,oEAAO;AACtB;AACA,MAAM,SAAS,oEAAO;AACtB;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,oCAAoC,EAAE;AACtC;AACA;AACA;AACA,oC;;;;;;;;;;;;;;;ACnnBA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,yBAAyB,wBAAwB,oCAAoC,yCAAyC,kCAAkC,0DAA0D,0BAA0B;AACpP,4BAA4B,gBAAgB,sBAAsB,OAAO,kDAAkD,sDAAsD,8BAA8B,mJAAmJ,qEAAqE,KAAK;AAC5a,oCAAoC,oEAAoE,0DAA0D;AAClK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7Q,gCAAgC;AAChC,8BAA8B;AAC9B,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI,uCAAuC,kGAAkG,iBAAiB,wCAAwC,MAAM,yCAAyC,6BAA6B,UAAU,YAAY,kEAAkE,WAAW,YAAY,iBAAiB,UAAU,MAAM,iFAAiF,UAAU,oBAAoB;AAC7gB,8BAA8B;AACe;;AAE7C;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW,gEAAQ;AACnB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;;AAEkG;AACzD;AACJ;AAC4D;AAC1B;AACE;AACV;AACZ;AACnD,YAAY,eAAe;AACgB;AACgB;AACoB;AACR;AACvE;AAC2E;AACgE;;AAE3I;AACA;AACA;;AAEA;AACA,kDAAkD,qDAAU,GAAG,uDAAY;;AAE3E;AACA;AACA;AACA,uDAAuD,uDAAY;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,gCAAgC;AACxD,wBAAwB,sBAAsB;AAC9C;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB,qHAAqH,8BAA8B,cAAc;AAClM;AACe;AACf,yBAAyB;AACzB;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sDAAU;AAC5B;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;;AAEA;AACA,iDAAiD,6DAAkB;AACnE;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6DAAkB;AAChD;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mFAAmF,uEAAe;AAClG;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,wFAAwF,gEAAgB;AACxG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY,QAAQ,GAAG,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gHAAuD;AACtE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO,2EAAmB;AAC1B,QAAQ,yFAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kFAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,YAAY,QAAQ,WAAW,wEAAwE;AACvG;AACA;AACA;AACA,8BAA8B,iFAAyB,CAAC,0EAA0B;AAClF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mEAAqB;AACpE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8EAAqB,CAAC,0EAA0B;AAC9E;AACA;;AAEA;AACA;AACA;AACA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isObject.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js"],"sourcesContent":["function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n function ParseError(code) {\n var _this;\n _classCallCheck(this, ParseError);\n _this = _callSuper(this, ParseError, [code]);\n // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n Object.setPrototypeOf(_this, ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n _inherits(ParseError, _Error);\n return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata, { validateMetadata } from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js';\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport isObject from './helpers/isObject.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n // Validate `countryOrCountryCallingCode` argument.\n if (!countryOrCountryCallingCode) {\n throw new TypeError('First argument is required');\n }\n if (typeof countryOrCountryCallingCode !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n // In case of public API use: `constructor(number, metadata)`.\n // Transform the arguments from `constructor(number, metadata)` to\n // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n throw new TypeError('`metadata` argument not passed');\n }\n if (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\n metadata = nationalNumber;\n var e164Number = countryOrCountryCallingCode;\n if (!E164_NUMBER_REGEXP.test(e164Number)) {\n throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n }\n var _extractCountryCallin = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata),\n _countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n nationalNumber = number;\n countryOrCountryCallingCode = _countryCallingCode;\n if (!nationalNumber) {\n throw new Error('Invalid `number` argument passed: too short');\n }\n }\n\n // Validate `nationalNumber` argument.\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` argument is required');\n }\n if (typeof nationalNumber !== 'string') {\n throw new TypeError('`nationalNumber` argument must be a string');\n }\n\n // Validate `metadata` argument.\n validateMetadata(metadata);\n\n // Initialize properties.\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n this.getMetadata = function () {\n return metadata;\n };\n }\n return _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n }\n\n // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n}();\nexport { PhoneNumber as default };\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson);\n // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n // for some weird reason: this line of code would cause the code coverage\n // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // options = { ...DEFAULT_OPTIONS, ...options }\n //\n options = merge({}, DEFAULT_OPTIONS, options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n metadata = new Metadata(metadata);\n\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance.\n // Also, according to the `PhoneNumber` class source code, `country` can't be \"001\".\n // It means that normally `input.country` or `input.countryCallingCode` is supposed\n // to be present because either of the two is always required to exist in a `PhoneNumber` instance.\n // This means that realistically, it's gonna step into either the first `if`\n // or the following `else if`, and normally it won't even reach the legacy-compatibility\n // `else return input.phone || ''` part.\n // So normally, it won't ever return an empty string here.\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n var number;\n switch (format) {\n case 'NATIONAL':\n // Normally, the `input` object is supposed to be a `PhoneNumber` class instance,\n // and a `PhoneNumber` class instance is always required to have a `nationalNumber`.\n // This means that the `if (!nationalNumber)` below is just for legacy-compatibility\n // and it normally can't really happen, so normally it won't ever return an empty string here.\n if (!nationalNumber) {\n return '';\n }\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n case 'IDD':\n // If the required `fromCountry` parameter is not passed, it will return `undefined`.\n if (!options.fromCountry) {\n return;\n // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n // If the country of the phone number doesn't support IDD calling, it will return `undefined`.\n if (!formattedNumber) {\n return;\n }\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n if (!format) {\n return number;\n }\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\n // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n // for some weird reason, it showed code coverage less than 100%.\n // That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // for (const format of availableFormats) { ... }\n //\n return pickFirstMatchingElement(availableFormats, function (format) {\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];\n // If leading digits don't match then move on to the next phone number format\n if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n return false;\n }\n }\n // Check that the national number matches the phone number format regular expression\n return matchesEntirely(nationalNumber, format.pattern());\n });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata);\n // When calling within the same country calling code.\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n }\n // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n return formattedNumber;\n }\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\nfunction merge() {\n var i = 1;\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n while (i < objects.length) {\n if (objects[i]) {\n for (var key in objects[i]) {\n objects[0][key] = objects[i][key];\n }\n }\n i++;\n }\n return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n var i = 0;\n while (i < elements.length) {\n if (testFunction(elements[i])) {\n return elements[i];\n }\n i++;\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport isViablePhoneNumber from './isViablePhoneNumber.js';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n var number;\n var ext;\n\n // Replace \"tel:\" with \"tel=\" for parsing convenience.\n text = text.replace(/^tel:/, 'tel=');\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n switch (name) {\n case 'tel':\n number = value;\n break;\n case 'ext':\n ext = value;\n break;\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n break;\n }\n }\n\n // If the phone number is not viable, then abort.\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n var result = {\n number: number\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n if (!number) {\n return '';\n }\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","import { VALID_PUNCTUATION } from '../constants.js';\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","import Metadata from '../metadata.js';\nimport mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, country, metadata) {\n return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nexport function checkNumberLengthForType(nationalNumber, country, type, metadata) {\n // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n // Most likely, in cases when there're multiple countries corresponding to the same\n // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n if (country) {\n metadata = new Metadata(metadata.metadata);\n metadata.selectNumberingPlan(country);\n }\n var type_info = metadata.type(type);\n\n // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);\n }\n var mobile_type = metadata.type('MOBILE');\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths());\n // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n }\n // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n var actual_length = nationalNumber.length;\n\n // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n }\n\n // We skip the first element since we've already checked it.\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import { VALID_DIGITS } from '../../constants.js';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n var extLimitWhenNotSure = '6';\n\n /** @type {string} */\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n /** @type {string} */\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n var optionalExtnSuffix = \"#?\";\n\n // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n /** @type {string} */\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n /** @type {string} */\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n // When extension is not separated clearly.\n /** @type {string} */\n var ambiguousSeparator = \"[- ]+\";\n // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n /** @type {string} */\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n /** @type {string} */\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n /** @type {string} */\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n /** @type {string} */\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import createExtensionPattern from './createExtensionPattern.js';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i');\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n if (start < 0) {\n return {};\n }\n // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nexport default function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n if (!number) {\n return {};\n }\n var isNumberWithIddPrefix;\n\n // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadata);\n // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || defaultCountry || defaultCallingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n }\n\n // `number` can only be international at this point.\n\n // Fast abortion: country codes do not begin with a '0'\n if (number[1] === '0') {\n return {};\n }\n metadata = new Metadata(metadata);\n\n // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n var i = 2;\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n i++;\n }\n return {};\n}\n\n// The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n var phoneNumberString;\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = '';\n\n // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n }\n\n // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber;\n // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n /* istanbul ignore else */\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n }\n\n // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n }\n // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryByCallingCode from './getCountryByCallingCode.js';\n\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Country, if known.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nexport default function extractNationalNumber(number, country, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n if (metadata.numberingPlan.possibleLengths()) {\n // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n if (!country) {\n country = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n }\n\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n\n// In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n }\n // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\n\nimport { VALID_DIGITS\n// PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n // If no phone-context parameter is present\n if (indexOfPhoneContext < 0) {\n return null;\n }\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n // If phone-context parameter is empty\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n // If phone-context is not the last parameter\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n if (phoneContext.length === 0) {\n return false;\n }\n\n // Does phone-context value match pattern of global-number-digits or domainname.\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js';\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :\n // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n metadata = _ref.metadata;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return;\n }\n // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n // const matchingCountries = []\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.selectNumberingPlan(country);\n // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n }\n // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // When multiple countries share the same \"country calling code\",\n // type patterns aren't guaranteed to be unique among them.\n // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n //\n // That means that this `if` condition could be `true` for multiple countries from the list.\n // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n // it could as well be `\"CA\"`.\n //\n // There was also a time when this attempted to be overly smart\n // and kept track of all such multiple matching countries\n // and then picked the one that matched the `defaultCountry`, if provided.\n // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n // it would've returned `\"CA\"` instead of `\"US\"`.\n // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n // for the \"country calling code\".\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n //\n return country;\n //\n // The \"overly smart\" behavior code:\n //\n // if (defaultCountry) {\n // \tif (country === defaultCountry) {\n // \t\treturn country\n // \t} else {\n // \t\tmatchingCountries.push(country)\n // \t}\n // } else {\n // \treturn country\n // }\n }\n }\n\n // // Return the first (\"main\") one of the `matchingCountries`.\n // if (matchingCountries.length > 0) {\n // \treturn matchingCountries[0]\n // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// If the `country` supports IDD calling, it returns a preferred IDD prefix.\n// If the `country` doesn't support IDD calling, it returns `undefined`.\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n\n // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n // Is this national number even valid for this country\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n }\n\n // Is it fixed line number\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n /* istanbul ignore if */\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n return 'FIXED_LINE';\n }\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n if (!type || !type.pattern()) {\n return false;\n }\n // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return [];\n }\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n _metadata.selectNumberingPlan(country);\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js';\n\n// Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + createExtensionPattern() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regularExpressionText) {\n // If the assigning of the `''` default value is moved to the arguments above,\n // the code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n return merged.sort(function (a, b) {\n return a - b;\n });\n\n // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\nexport default function parseDigits(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n if (digit) {\n result += digit;\n }\n }\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n metadata = new Metadata(metadata);\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n }\n\n // Old metadata (< 1.0.18) had no \"possible length\" data.\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, country, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n }\n\n // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","function _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js';\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n return _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return;\n // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n }\n\n // Deprecated.\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n }\n\n // Deprecated.\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n }\n\n // Deprecated.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n }\n\n // Deprecated.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n }\n\n // Deprecated.\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n }\n\n // Deprecated.\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n }\n\n // Deprecated.\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n }\n\n // Deprecated.\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n }\n\n // Deprecated.\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n }\n\n // Deprecated.\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n}();\nexport { Metadata as default };\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n return _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n }\n\n // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n }\n\n // Is always present.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n }\n\n // Is only present when a country supports multiple IDD prefixes.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n }\n\n // \"possible length\" data is always present in Google's metadata.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n }\n\n // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n }\n\n // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n }\n\n // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n }\n // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n}();\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n this._format = format;\n this.metadata = metadata;\n }\n return _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n\n // Checks whether national prefix formatting rule contains national prefix.\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() &&\n // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n this.type = type;\n this.metadata = metadata;\n }\n return _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n}();\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n case 'MOBILE':\n return types[1];\n case 'TOLL_FREE':\n return types[2];\n case 'PREMIUM_RATE':\n return types[3];\n case 'PERSONAL_NUMBER':\n return types[4];\n case 'VOICEMAIL':\n return types[5];\n case 'UAN':\n return types[6];\n case 'PAGER':\n return types[7];\n case 'VOIP':\n return types[8];\n case 'SHARED_COST':\n return types[9];\n }\n}\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n }\n\n // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n // For that reason, it's not used in this detection algorithm.\n // Instead, it detects by `countries: {}` property existence.\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).ext();\n }\n return DEFAULT_EXT_PREFIX;\n}\n\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).countryCallingCode();\n }\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n var version = metadata.version;\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n}\n\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport isObject from './helpers/isObject.js';\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n var text;\n var options;\n var metadata;\n\n // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.');\n\n // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n }\n // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js';\n// import { parseRFC3966 } from './helpers/RFC3966.js'\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js';\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n\n // Validate `defaultCountry`.\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n }\n\n // Parse the phone number.\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error;\n\n // If the phone number is not viable then return nothing.\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n throw new ParseError('NOT_A_NUMBER');\n }\n return {};\n }\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n return {};\n }\n\n // Validate national (significant) number length.\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n\n // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n if (country) {\n phoneNumber.country = country;\n }\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n if (ext) {\n phoneNumber.ext = ext;\n }\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n }\n\n // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n }\n\n // isInternational: countryCallingCode !== undefined\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, country, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n return;\n }\n if (extract === false) {\n return text;\n }\n // Attempt to extract a possible number from the string passed in\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n if (startsAt < 0) {\n return;\n }\n return text\n // Trim everything to the left of the phone number\n .slice(startsAt)\n // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n });\n // If the phone number is not viable, then abort.\n if (!number) {\n return {};\n }\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n return {};\n }\n // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n var withExtensionStripped = extractExtension(number);\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n return {\n number: number\n };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n // The exact country of the phone number\n var country;\n\n // If `formattedPhoneNumber` is passed in \"international\" format,\n // choose a country by `countryCallingCode`.\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n }\n // Else, if `formattedPhoneNumber` is passed in \"national\" format,\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), country, metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n if (exactCountry === '001') {\n // Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.selectNumberingPlan(country);\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { parseDigit } from './helpers/parseDigits.js';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n return result;\n}\n\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `eventListener` argument.\n //\n // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof eventListener === 'function') {\n eventListener('end');\n }\n return;\n }\n return '+';\n }\n // Allow digits.\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-79]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"(?:[025-7]\\\\d|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7[1-8]\\\\d)\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[02-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:2\\\\d|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6(?:[25-9]\\\\d|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-3])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33622|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-7]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[579]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[1-48])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,0,[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[1-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-8]\\\\d|90)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[5-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[0-29]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"561(?:011|61\\\\d)\\\\d{4}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-35-9]|7[13-9])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[246])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[1689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[1278]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}"],"names":[],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js.dev.js","mappings":";;;;;;;;;;;;;AAAA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7Q,iCAAiC;AACjC,+BAA+B;AAC/B,4CAA4C,uEAAuE,mGAAmG;AACtN,qCAAqC,yGAAyG;AAC9I,2BAA2B,qHAAqH,gDAAgD,eAAe,4CAA4C,2CAA2C,cAAc;AACpT,+BAA+B,uDAAuD,yDAAyD,mDAAmD,uGAAuG,oBAAoB,+BAA+B,qBAAqB,qBAAqB,sEAAsE,wDAAwD,eAAe,kEAAkE,iCAAiC;AACtnB,+BAA+B,kFAAkF,gBAAgB,oBAAoB,oCAAoC;AACzL,uCAAuC,MAAM,qFAAqF,MAAM,aAAa,2EAA2E,aAAa;AAC7O,gCAAgC,MAAM,oEAAoE,YAAY;AACtH,iCAAiC,kGAAkG,4BAA4B;AAC/J,8BAA8B,+FAA+F,iDAAiD;AAC9K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACgC;AACjC,sC;;;;;;;;;;;;;;;;;;;;;;ACpCA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,yBAAyB,wBAAwB,oCAAoC,yCAAyC,kCAAkC,0DAA0D,0BAA0B;AACpP,4BAA4B,gBAAgB,sBAAsB,OAAO,kDAAkD,sDAAsD,8BAA8B,mJAAmJ,qEAAqE,KAAK;AAC5a,oCAAoC,oEAAoE,0DAA0D;AAClK,iCAAiC;AACjC,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAClN;AACZ;AACN;AACc;AACgC;AACR;AAClC;AACN;AACvC;AACA;AACA;AACA,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc,QAAQ;AACtB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAQ,oBAAoB,gEAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,kCAAkC,iFAAyB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,8DAAgB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,aAAa,qFAA6B;AAC1C;AACA,GAAG;AACH;AACA;AACA,aAAa,0DAAgB;AAC7B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,uDAAa;AAC1B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,yBAAyB,oDAAQ;AACjC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,qEAAa;AAC1B;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA,aAAa,sDAAY,wDAAwD,cAAc;AAC/F;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACiC;AAClC;AACA,iBAAiB,EAAE;AACnB;AACA;AACA;AACA;AACA,qBAAqB,oDAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;;;;;ACvMA;AACO;;AAEP;AACA;AACO;;AAEP;AACO;;AAEP;AACA;AACO;;AAEP;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACA;AACP;AACA,qC;;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AACA;;AAE2D;AACgC;AAC3B;AACX;AACA;AACrD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kDAAkD,eAAe;AACjE,6CAA6C,eAAe;AAC5D;AACA,YAAY,oCAAoC,qBAAqB,KAAK;AAC1E,YAAY,oCAAoC;AAChD;AACA,YAAY,oBAAoB,4IAA4I,8BAA8B;AAC1M,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,sBAAsB;AACtB,IAAI;AACJ;AACA;AACA,iBAAiB,oDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yBAAyB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,kEAAa;AAC1B;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uFAA+B;AACxC;AACA;AACA;AACA;AACA,GAAG;AACH;AACO;AACP;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uEAAe;AAC1B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,+BAA+B,mEAAqB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,oEAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,aAAa;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kC;;;;;;;;;;;;;;;;AChMA,gCAAgC;AAChC,8BAA8B;AAC9B,uCAAuC,kGAAkG,iBAAiB,wCAAwC,MAAM,yCAAyC,6BAA6B,UAAU,YAAY,kEAAkE,WAAW,YAAY,iBAAiB,UAAU,MAAM,iFAAiF,UAAU,oBAAoB;AAC7gB,8BAA8B;AAC9B,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AAC9E;;AAE3D;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,eAAe;AACtC;AACO;AACP;AACA;;AAEA;AACA;AACA,oEAAoE,YAAY,4BAA4B;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,mEAAmB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,QAAQ,KAAK,qBAAqB;AAC9C,YAAY,QAAQ;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,mC;;;;;;;;;;;;;;;ACxEoD;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf,uDAAuD,4DAAiB;AACxE;AACA,4D;;;;;;;;;;;;;;;;;ACnCsC;AACK;AAC5B;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,2DAAW;AACpC,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6C;;;;;;;;;;;;;;;AC/GkD;;AAElD;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA;AACA,qBAAqB,uDAAY,KAAK,yBAAyB;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACe;AACf;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA,aAAa,QAAQ;AACrB;AACA;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,4CAA4C,EAAE,EAAE;;AAEhD,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA,aAAa,QAAQ;AACrB;AACA,aAAa,QAAQ;AACrB;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kD;;;;;;;;;;;;;;;AC9FiE;;AAEjE;AACA;AACA,sCAAsC,sEAAsB;;AAE5D;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;;;;;;;;;;;;;;;;;AC7BiD;AACkG;AAC7G;AACoB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,gFAAgF;AACvG;AACA,iBAAiB,+CAA+C;AAChE;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8DAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,oCAAoC,+GAA+D;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,kEAAuB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qD;;;;;;;;;;;;;;;;;;AC5IsC;AACa;AACY;AACR;AACS;;AAEhE;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ,GAAG,6CAA6C;AACpE;AACe;AACf,uDAAuD,mEAAqB;AAC5E;AACA,mBAAmB,oDAAQ;AAC3B;AACA;AACA,gCAAgC,qEAAqB;AACrD;AACA,iCAAiC,qEAAqB;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAe,sDAAsD,+DAAe,qEAAqE,iEAAiB;AACnL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2F;;;;;;;;;;;;;;;;AC9CkK;AACxH;;AAE1C;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB;AACA;AACe;AACf;AACA,qBAAqB,mEAAmB;AACxC,OAAO,4EAAmB;AAC1B,cAAc,sDAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA,mCAAmC,8DAAS;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qDAAqD,oEAAe;AACpE;AACA;AACA;AACA;AACA;AACA,qDAAqD,oEAAe;AACpE,MAAM;AACN;AACA;AACA,oDAAoD,2EAAsB;AAC1E;AACA;;AAEA;AACA;AACA;AACA,8CAA8C,6EAAwB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mF;;;;;;;;;;;;;;;;;;AChEuH;AACpE;AACI;AACY;;AAEnE;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,UAAU;AACtB,YAAY,QAAQ,GAAG,8CAA8C;AACrE;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iGAAiD;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,uEAAuB;AACzC;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,+DAAe,6DAA6D,+DAAe;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,iEAAiB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iD;;;;;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB;AAC3C,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY,QAAQ,GAAG,sEAAsE;AAC7F;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6E;;;;;;;;;;;;;;;;;;;;ACrGA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAIyB;AAClB;AACP;AACA,uCAAuC,uDAAY;AACnD,gGAAgG,uDAAY;;AAE5G;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,uDAAY;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACA,+BAA+B;AAC/B,iCAAiC;;AAExC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,aAAa;AACzB;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+C;;;;;;;;;;;;;;;;ACjFqF;;AAErF;AACA;AACA;AACA;AACO;AACQ;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,gFAAgC;AAC3C;AACA;AACA;AACA,2D;;;;;;;;;;;;;;;AChCyE;AACzE;;AAEA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0EAA0B;AACnC;AACA;AACA,GAAG;AACH;AACA,mD;;;;;;;;;;;;;;;;AC5BA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACnG;AACS;;AAE/C;AACA;AACe;AACf;AACA;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;;AAEA,0EAA0E,4BAA4B;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAa;AAC1B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sD;;;;;;;;;;;;;;;AC9EsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACe;AACf,4BAA4B,oDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC;;;;;;;;;;;;;;;;;ACzBA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACnG;AACa;AACnD;;AAEA;AACe;AACf,yBAAyB;AACzB;AACA;;AAEA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;AACzB;AACA;;AAEA;AACA;;AAEA;AACA,OAAO,+DAAe;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F,4BAA4B;AACvH;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAe;AACxB;AACA,yC;;;;;;;;;;;;;;;ACnFsC;;AAEtC;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB;AACe;AACf,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,yD;;;;;;;;;;;;;;AC3BA,0BAA0B;AACX;AACf;AACA;AACA,oC;;;;;;;;;;;;;;;;;;;ACJkG;AACvB;;AAE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA,sCAAsC,GAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,4CAA4C,uDAAY,MAAM,IAAI,6DAAkB,KAAK;AACzF;AACA;AACA;AACA;AACO,+BAA+B,qDAAU,MAAM,IAAI,kBAAkB,4DAAiB,gBAAgB,uDAAY,YAAY,GAAG,UAAU,4DAAiB,GAAG,uDAAY;;AAElL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAU,MAAM,IAAI,kBAAkB,4DAAiB,gBAAgB,uDAAY,YAAY,IAAI;AAC1J;AACP;AACA,QAAQ,gFAAsB;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACe;AACf,0BAA0B,6DAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,+C;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA;AACA,2C;;;;;;;;;;;;;;ACXA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA,YAAY,GAAG;AACf,YAAY,GAAG;AACf,YAAY;AACZ;AACe;AACf;AACA,kEAAkE,4BAA4B;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;AC5BA,iDAAiD,+EAA+E,4CAA4C,yGAAyG,cAAc,WAAW,qBAAqB,yBAAyB,WAAW,IAAI,gCAAgC;AAC3Y,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,4BAA4B;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uC;;;;;;;;;;;;;;;;AClHsC;AACS;AAC/C,gDAAgD,uDAAY;AAC7C;AACf;AACA;AACA;AACA;AACA,4BAA4B,oDAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0C;;;;;;;;;;;;;;;;;AC5BqC;AAC0B;;AAE/D;AACA;AACA;AACA,qCAAqC,eAAe;AACpD;AACA,gBAAgB,oCAAoC,IAAI,KAAK;AAC7D,gBAAgB,oCAAoC;AACpD;AACA,YAAY,oBAAoB,4IAA4I,8BAA8B;AAC1M,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACe;AACf;AACA;AACA;AACA;AACA,iBAAiB,oDAAQ;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACO;AACP;AACA,UAAU,yEAAiB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;;;;;;;;;;;;;;;;AC5EqC;AACsB;AACJ;;AAEvD;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA,gBAAgB,oCAAoC,IAAI,KAAK;AAC7D,gBAAgB,oCAAoC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAoC;AACvD;AACA;AACe;AACf,yBAAyB;AACzB;AACA;AACA,iBAAiB,oDAAQ;AACzB;;AAEA;AACA;AACA;AACA,WAAW,qEAAa;AACxB;;AAEA;AACA;AACA;AACA,SAAS,uEAAe;AACxB;AACA,mC;;;;;;;;;;;;;;;;;;;;ACxDA,6BAA6B;AAC7B,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,iCAAiC;AACjC,mCAAmC,gBAAgB,cAAc,OAAO,cAAc;AACtF,iCAAiC,qHAAqH,cAAc;AACpK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7N;AACH;;AAE7C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AAC8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C,OAAO,gEAAQ,eAAe,gEAAQ;AACtC,iLAAiL,gEAAQ,oCAAoC,0CAA0C;AACvQ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,MAAM,SAAS,oEAAO;AACtB;AACA,MAAM,SAAS,oEAAO;AACtB;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,oCAAoC,EAAE;AACtC;AACA;AACA;AACA,oC;;;;;;;;;;;;;;;ACnnBA,sBAAsB,2BAA2B,oGAAoG,mBAAmB,iBAAiB,sHAAsH;AAC/S,yBAAyB,wBAAwB,oCAAoC,yCAAyC,kCAAkC,0DAA0D,0BAA0B;AACpP,4BAA4B,gBAAgB,sBAAsB,OAAO,kDAAkD,sDAAsD,8BAA8B,mJAAmJ,qEAAqE,KAAK;AAC5a,oCAAoC,oEAAoE,0DAA0D;AAClK,6BAA6B,mCAAmC;AAChE,8BAA8B,4CAA4C,+BAA+B,oBAAoB,mCAAmC,sCAAsC,uEAAuE;AAC7Q,gCAAgC;AAChC,8BAA8B;AAC9B,6CAA6C,SAAS,0DAA0D,UAAU,gCAAgC;AAC1J,mCAAmC,+CAA+C,8BAA8B,OAAO,kBAAkB;AACzI,uCAAuC,kGAAkG,iBAAiB,wCAAwC,MAAM,yCAAyC,6BAA6B,UAAU,YAAY,kEAAkE,WAAW,YAAY,iBAAiB,UAAU,MAAM,iFAAiF,UAAU,oBAAoB;AAC7gB,8BAA8B;AACe;;AAE7C;AACA;AACA;AACA;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW,gEAAQ;AACnB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;;AAEkG;AACzD;AACJ;AAC4D;AAC1B;AACE;AACV;AACZ;AACnD,YAAY,eAAe;AACgB;AACgB;AACoB;AACR;AACvE;AAC2E;AACgE;;AAE3I;AACA;AACA;;AAEA;AACA,kDAAkD,qDAAU,GAAG,uDAAY;;AAE3E;AACA;AACA;AACA,uDAAuD,uDAAY;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,WAAW,iBAAiB;AAC5D,gCAAgC,WAAW,iBAAiB;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,gCAAgC;AACxD,wBAAwB,sBAAsB;AAC9C;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,qBAAqB,qHAAqH,8BAA8B,cAAc;AAClM;AACe;AACf,yBAAyB;AACzB;AACA;AACA,iBAAiB,oDAAQ;;AAEzB;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sDAAU;AAC5B;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;;AAEA;AACA,iDAAiD,6DAAkB;AACnE;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6DAAkB;AAChD;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mFAAmF,uEAAe;AAClG;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,wFAAwF,gEAAgB;AACxG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sDAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,SAAS;AACrB,YAAY,QAAQ,GAAG,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gHAAuD;AACtE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,OAAO,2EAAmB;AAC1B,QAAQ,yFAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kFAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB,YAAY,QAAQ,WAAW,wEAAwE;AACvG;AACA;AACA;AACA,8BAA8B,iFAAyB,CAAC,0EAA0B;AAClF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mEAAqB;AACpE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8EAAqB,CAAC,0EAA0B;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gFAAuB;AAC5C;AACA;AA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/ParseError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/PhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/constants.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/format.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/RFC3966.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/applyInternationalSeparatorStyle.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/checkNumberLength.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/createExtensionPattern.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extension/extractExtension.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/extractPhoneContext.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/formatNationalNumberUsingFormat.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByCallingCode.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getCountryByNationalNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getNumberType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/getPossibleCountriesForNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isObject.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/isViablePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/matchesEntirely.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/mergeArrays.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/parseDigits.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/helpers/stripIddPrefix.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isPossible.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/isValid.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/metadata.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/normalizeArguments.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parse.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parseIncompletePhoneNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/parsePhoneNumberWithError_.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/tools/semver-compare.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/metadata.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/parsePhoneNumberWithError.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/withMetadataArgument.js"],"sourcesContent":["function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _wrapNativeSuper(t) { var r = \"function\" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf(\"[native code]\"); } catch (n) { return \"function\" == typeof t; } }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\n// https://stackoverflow.com/a/46971044/970769\n// \"Breaking changes in Typescript 2.1\"\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\nvar ParseError = /*#__PURE__*/function (_Error) {\n function ParseError(code) {\n var _this;\n _classCallCheck(this, ParseError);\n _this = _callSuper(this, ParseError, [code]);\n // Set the prototype explicitly.\n // Any subclass of FooError will have to manually set the prototype as well.\n Object.setPrototypeOf(_this, ParseError.prototype);\n _this.name = _this.constructor.name;\n return _this;\n }\n _inherits(ParseError, _Error);\n return _createClass(ParseError);\n}(/*#__PURE__*/_wrapNativeSuper(Error));\nexport { ParseError as default };\n//# sourceMappingURL=ParseError.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata, { validateMetadata } from './metadata.js';\nimport isPossibleNumber from './isPossible.js';\nimport isValidNumber from './isValid.js';\nimport getNumberType from './helpers/getNumberType.js';\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport isObject from './helpers/isObject.js';\nimport formatNumber from './format.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar PhoneNumber = /*#__PURE__*/function () {\n /**\r\n * @param {string} countryOrCountryCallingCode\r\n * @param {string} nationalNumber\r\n * @param {object} metadata — Metadata JSON\r\n * @return {PhoneNumber}\r\n */\n function PhoneNumber(countryOrCountryCallingCode, nationalNumber, metadata) {\n _classCallCheck(this, PhoneNumber);\n // Validate `countryOrCountryCallingCode` argument.\n if (!countryOrCountryCallingCode) {\n throw new TypeError('First argument is required');\n }\n if (typeof countryOrCountryCallingCode !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n // In case of public API use: `constructor(number, metadata)`.\n // Transform the arguments from `constructor(number, metadata)` to\n // `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\n if (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\n throw new TypeError('`metadata` argument not passed');\n }\n if (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\n metadata = nationalNumber;\n var e164Number = countryOrCountryCallingCode;\n if (!E164_NUMBER_REGEXP.test(e164Number)) {\n throw new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits');\n }\n var _extractCountryCallin = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata),\n _countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n nationalNumber = number;\n countryOrCountryCallingCode = _countryCallingCode;\n if (!nationalNumber) {\n throw new Error('Invalid `number` argument passed: too short');\n }\n }\n\n // Validate `nationalNumber` argument.\n if (!nationalNumber) {\n throw new TypeError('`nationalNumber` argument is required');\n }\n if (typeof nationalNumber !== 'string') {\n throw new TypeError('`nationalNumber` argument must be a string');\n }\n\n // Validate `metadata` argument.\n validateMetadata(metadata);\n\n // Initialize properties.\n var _getCountryAndCountry = getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadata),\n country = _getCountryAndCountry.country,\n countryCallingCode = _getCountryAndCountry.countryCallingCode;\n this.country = country;\n this.countryCallingCode = countryCallingCode;\n this.nationalNumber = nationalNumber;\n this.number = '+' + this.countryCallingCode + this.nationalNumber;\n // Exclude `metadata` property output from `PhoneNumber.toString()`\n // so that it doesn't clutter the console output of Node.js.\n // Previously, when Node.js did `console.log(new PhoneNumber(...))`,\n // it would output the whole internal structure of the `metadata` object.\n this.getMetadata = function () {\n return metadata;\n };\n }\n return _createClass(PhoneNumber, [{\n key: \"setExt\",\n value: function setExt(ext) {\n this.ext = ext;\n }\n }, {\n key: \"getPossibleCountries\",\n value: function getPossibleCountries() {\n if (this.country) {\n return [this.country];\n }\n return getPossibleCountriesForNumber(this.countryCallingCode, this.nationalNumber, this.getMetadata());\n }\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n return isPossibleNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isValid\",\n value: function isValid() {\n return isValidNumber(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"isNonGeographic\",\n value: function isNonGeographic() {\n var metadata = new Metadata(this.getMetadata());\n return metadata.isNonGeographicCallingCode(this.countryCallingCode);\n }\n }, {\n key: \"isEqual\",\n value: function isEqual(phoneNumber) {\n return this.number === phoneNumber.number && this.ext === phoneNumber.ext;\n }\n\n // This function was originally meant to be an equivalent for `validatePhoneNumberLength()`,\n // but later it was found out that it doesn't include the possible `TOO_SHORT` result\n // returned from `parsePhoneNumberWithError()` in the original `validatePhoneNumberLength()`,\n // so eventually I simply commented out this method from the `PhoneNumber` class\n // and just left the `validatePhoneNumberLength()` function, even though that one would require\n // and additional step to also validate the actual country / calling code of the phone number.\n // validateLength() {\n // \tconst metadata = new Metadata(this.getMetadata())\n // \tmetadata.selectNumberingPlan(this.countryCallingCode)\n // \tconst result = checkNumberLength(this.nationalNumber, metadata)\n // \tif (result !== 'IS_POSSIBLE') {\n // \t\treturn result\n // \t}\n // }\n }, {\n key: \"getType\",\n value: function getType() {\n return getNumberType(this, {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"format\",\n value: function format(_format, options) {\n return formatNumber(this, _format, options ? _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }) : {\n v2: true\n }, this.getMetadata());\n }\n }, {\n key: \"formatNational\",\n value: function formatNational(options) {\n return this.format('NATIONAL', options);\n }\n }, {\n key: \"formatInternational\",\n value: function formatInternational(options) {\n return this.format('INTERNATIONAL', options);\n }\n }, {\n key: \"getURI\",\n value: function getURI(options) {\n return this.format('RFC3966', options);\n }\n }]);\n}();\nexport { PhoneNumber as default };\nvar isCountryCode = function isCountryCode(value) {\n return /^[A-Z]{2}$/.test(value);\n};\nfunction getCountryAndCountryCallingCode(countryOrCountryCallingCode, metadataJson) {\n var country;\n var countryCallingCode;\n var metadata = new Metadata(metadataJson);\n // If country code is passed then derive `countryCallingCode` from it.\n // Also store the country code as `.country`.\n if (isCountryCode(countryOrCountryCallingCode)) {\n country = countryOrCountryCallingCode;\n metadata.selectNumberingPlan(country);\n countryCallingCode = metadata.countryCallingCode();\n } else {\n countryCallingCode = countryOrCountryCallingCode;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(countryCallingCode)) {\n country = '001';\n }\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode\n };\n}\nvar E164_NUMBER_REGEXP = /^\\+\\d+$/;\n//# sourceMappingURL=PhoneNumber.js.map","// The minimum length of the national significant number.\nexport var MIN_LENGTH_FOR_NSN = 2;\n\n// The ITU says the maximum length should be 15,\n// but one can find longer numbers in Germany.\nexport var MAX_LENGTH_FOR_NSN = 17;\n\n// The maximum length of the country calling code.\nexport var MAX_LENGTH_COUNTRY_CODE = 3;\n\n// Digits accepted in phone numbers\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\nexport var VALID_DIGITS = \"0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9\";\n\n// `DASHES` will be right after the opening square bracket of the \"character class\"\nvar DASHES = \"-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D\";\nvar SLASHES = \"\\uFF0F/\";\nvar DOTS = \"\\uFF0E.\";\nexport var WHITESPACE = \" \\xA0\\xAD\\u200B\\u2060\\u3000\";\nvar BRACKETS = \"()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]\";\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\nvar TILDES = \"~\\u2053\\u223C\\uFF5E\";\n\n// Regular expression of acceptable punctuation found in phone numbers. This\n// excludes punctuation found as a leading character only. This consists of dash\n// characters, white space characters, full stops, slashes, square brackets,\n// parentheses and tildes. Full-width variants are also present.\nexport var VALID_PUNCTUATION = \"\".concat(DASHES).concat(SLASHES).concat(DOTS).concat(WHITESPACE).concat(BRACKETS).concat(TILDES);\nexport var PLUS_CHARS = \"+\\uFF0B\";\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')\n//# sourceMappingURL=constants.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nimport Metadata, { getCountryCallingCode } from './metadata.js';\nimport getIddPrefix from './helpers/getIddPrefix.js';\nimport { formatRFC3966 } from './helpers/RFC3966.js';\nvar DEFAULT_OPTIONS = {\n formatExtension: function formatExtension(formattedNumber, extension, metadata) {\n return \"\".concat(formattedNumber).concat(metadata.ext()).concat(extension);\n }\n};\n\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function formatNumber(input, format, options, metadata) {\n // Apply default options.\n if (options) {\n // Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\n // for some weird reason: this line of code would cause the code coverage\n // to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // options = { ...DEFAULT_OPTIONS, ...options }\n //\n options = merge({}, DEFAULT_OPTIONS, options);\n } else {\n options = DEFAULT_OPTIONS;\n }\n metadata = new Metadata(metadata);\n if (input.country && input.country !== '001') {\n // Validate `input.country`.\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else if (input.countryCallingCode) {\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else return input.phone || '';\n var countryCallingCode = metadata.countryCallingCode();\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // This variable should have been declared inside `case`s\n // but Babel has a bug and it says \"duplicate variable declaration\".\n var number;\n switch (format) {\n case 'NATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return '';\n }\n number = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'INTERNATIONAL':\n // Legacy argument support.\n // (`{ country: ..., phone: '' }`)\n if (!nationalNumber) {\n return \"+\".concat(countryCallingCode);\n }\n number = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options);\n number = \"+\".concat(countryCallingCode, \" \").concat(number);\n return addExtension(number, input.ext, metadata, options.formatExtension);\n case 'E.164':\n // `E.164` doesn't define \"phone number extensions\".\n return \"+\".concat(countryCallingCode).concat(nationalNumber);\n case 'RFC3966':\n return formatRFC3966({\n number: \"+\".concat(countryCallingCode).concat(nationalNumber),\n ext: input.ext\n });\n\n // For reference, here's Google's IDD formatter:\n // https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\n // Not saying that this IDD formatter replicates it 1:1, but it seems to work.\n // Who would even need to format phone numbers in IDD format anyway?\n case 'IDD':\n if (!options.fromCountry) {\n return;\n // throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\n }\n var formattedNumber = formatIDD(nationalNumber, input.carrierCode, countryCallingCode, options.fromCountry, metadata);\n return addExtension(formattedNumber, input.ext, metadata, options.formatExtension);\n default:\n throw new Error(\"Unknown \\\"format\\\" argument passed to \\\"formatNumber()\\\": \\\"\".concat(format, \"\\\"\"));\n }\n}\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\n var format = chooseFormatForNumber(metadata.formats(), number);\n if (!format) {\n return number;\n }\n return formatNationalNumberUsingFormat(number, format, {\n useInternationalFormat: formatAs === 'INTERNATIONAL',\n withNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && options && options.nationalPrefix === false ? false : true,\n carrierCode: carrierCode,\n metadata: metadata\n });\n}\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\n // Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\n // for some weird reason, it showed code coverage less than 100%.\n // That's because `babel`/`istanbul`, for some weird reason,\n // apparently doesn't know how to properly exclude Babel polyfills from code coverage.\n //\n // for (const format of availableFormats) { ... }\n //\n return pickFirstMatchingElement(availableFormats, function (format) {\n // Validate leading digits.\n // The test case for \"else path\" could be found by searching for\n // \"format.leadingDigitsPatterns().length === 0\".\n if (format.leadingDigitsPatterns().length > 0) {\n // The last leading_digits_pattern is used here, as it is the most detailed\n var lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1];\n // If leading digits don't match then move on to the next phone number format\n if (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\n return false;\n }\n }\n // Check that the national number matches the phone number format regular expression\n return matchesEntirely(nationalNumber, format.pattern());\n });\n}\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\n return ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber;\n}\nfunction formatIDD(nationalNumber, carrierCode, countryCallingCode, fromCountry, metadata) {\n var fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata);\n // When calling within the same country calling code.\n if (fromCountryCallingCode === countryCallingCode) {\n var formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata);\n // For NANPA regions, return the national format for these regions\n // but prefix it with the country calling code.\n if (countryCallingCode === '1') {\n return countryCallingCode + ' ' + formattedNumber;\n }\n // If regions share a country calling code, the country calling code need\n // not be dialled. This also applies when dialling within a region, so this\n // if clause covers both these cases. Technically this is the case for\n // dialling from La Reunion to other overseas departments of France (French\n // Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\n // this edge case for now and for those cases return the version including\n // country calling code. Details here:\n // http://www.petitfute.com/voyage/225-info-pratiques-reunion\n //\n return formattedNumber;\n }\n var iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata);\n if (iddPrefix) {\n return \"\".concat(iddPrefix, \" \").concat(countryCallingCode, \" \").concat(formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata));\n }\n}\nfunction merge() {\n var i = 1;\n for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {\n objects[_key] = arguments[_key];\n }\n while (i < objects.length) {\n if (objects[i]) {\n for (var key in objects[i]) {\n objects[0][key] = objects[i][key];\n }\n }\n i++;\n }\n return objects[0];\n}\nfunction pickFirstMatchingElement(elements, testFunction) {\n var i = 0;\n while (i < elements.length) {\n if (testFunction(elements[i])) {\n return elements[i];\n }\n i++;\n }\n}\n//# sourceMappingURL=format.js.map","function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport isViablePhoneNumber from './isViablePhoneNumber.js';\n\n// https://www.ietf.org/rfc/rfc3966.txt\n\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nexport function parseRFC3966(text) {\n var number;\n var ext;\n\n // Replace \"tel:\" with \"tel=\" for parsing convenience.\n text = text.replace(/^tel:/, 'tel=');\n for (var _iterator = _createForOfIteratorHelperLoose(text.split(';')), _step; !(_step = _iterator()).done;) {\n var part = _step.value;\n var _part$split = part.split('='),\n _part$split2 = _slicedToArray(_part$split, 2),\n name = _part$split2[0],\n value = _part$split2[1];\n switch (name) {\n case 'tel':\n number = value;\n break;\n case 'ext':\n ext = value;\n break;\n case 'phone-context':\n // Only \"country contexts\" are supported.\n // \"Domain contexts\" are ignored.\n if (value[0] === '+') {\n number = value + number;\n }\n break;\n }\n }\n\n // If the phone number is not viable, then abort.\n if (!isViablePhoneNumber(number)) {\n return {};\n }\n var result = {\n number: number\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\nexport function formatRFC3966(_ref) {\n var number = _ref.number,\n ext = _ref.ext;\n if (!number) {\n return '';\n }\n if (number[0] !== '+') {\n throw new Error(\"\\\"formatRFC3966()\\\" expects \\\"number\\\" to be in E.164 format.\");\n }\n return \"tel:\".concat(number).concat(ext ? ';ext=' + ext : '');\n}\n//# sourceMappingURL=RFC3966.js.map","import { VALID_PUNCTUATION } from '../constants.js';\n\n// Removes brackets and replaces dashes with spaces.\n//\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\n//\n// For some reason Google's metadata contains ``s with brackets and dashes.\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\n//\n// For example, Google's `` for USA is `+1 213-373-4253`.\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\n//\n// \"The country calling code for all countries participating in the NANP is 1.\n// In international format, an NANP number should be listed as +1 301 555 01 00,\n// where 301 is an area code (Maryland).\"\n//\n// I personally prefer the international format without any punctuation.\n// For example, brackets are remnants of the old age, meaning that the\n// phone number part in brackets (so called \"area code\") can be omitted\n// if dialing within the same \"area\".\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\n// He has a couple of seconds to memorize that number until it passes by.\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\n// but with hyphens instead of spaces the grouping is more explicit.\n// I personally think that hyphens introduce visual clutter,\n// so I prefer replacing them with spaces in international numbers.\n// In the modern age all output is done on displays where spaces are clearly distinguishable\n// so hyphens can be safely replaced with spaces without losing any legibility.\n//\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\n return formattedNumber.replace(new RegExp(\"[\".concat(VALID_PUNCTUATION, \"]+\"), 'g'), ' ').trim();\n}\n//# sourceMappingURL=applyInternationalSeparatorStyle.js.map","import Metadata from '../metadata.js';\nimport mergeArrays from './mergeArrays.js';\nexport default function checkNumberLength(nationalNumber, country, metadata) {\n return checkNumberLengthForType(nationalNumber, country, undefined, metadata);\n}\n\n// Checks whether a number is possible for a certain `country` based on the number length.\n//\n// This function is not supported by metadata generated with ancient versions of\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\n//\n// There was also a known issue with `checkNumberLength()` function:\n// if a number is possible only in a certain `country` among several `countries`\n// that share the same \"country calling code\", that function would check\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\n// and would not check if it's actually be possible in the speciifc `country`.\n//\n// For example, \"+1310xxxx\" numbers are valid in Canada.\n// However, they are not possible in the US due to being too short.\n// Since Canada and the US share the same country calling code — \"+1\" —\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\n//\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\n// but at the same time `isPossible()` could output `false`, which was contradictory.\n//\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\n//\n// The solution suggested by Google was implemented: an optional `country` argument\n// was added to `checkNumberLength()` function. If present, that `country` will be used\n// to check phone number length for that specific `country` rather than the \"main\" country\n// for the shared \"country calling code\".\n//\nexport function checkNumberLengthForType(nationalNumber, country, type, metadata) {\n // If the exact `country` is specified, it's no necessarily already selected in `metadata`.\n // Most likely, in cases when there're multiple countries corresponding to the same\n // \"country calling code\", the \"main\" country for that \"country calling code\" will be selected.\n if (country) {\n metadata = new Metadata(metadata.metadata);\n metadata.selectNumberingPlan(country);\n }\n var type_info = metadata.type(type);\n\n // There should always be \"\" set for every type element.\n // This is declared in the XML schema.\n // For size efficiency, where a sub-description (e.g. fixed-line)\n // has the same \"\" as the \"general description\", this is missing,\n // so we fall back to the \"general description\". Where no numbers of the type\n // exist at all, there is one possible length (-1) which is guaranteed\n // not to match the length of any real phone number.\n var possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths();\n // let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\n\n // Metadata before version `1.0.18` didn't contain `possible_lengths`.\n if (!possible_lengths) {\n return 'IS_POSSIBLE';\n }\n if (type === 'FIXED_LINE_OR_MOBILE') {\n // No such country in metadata.\n /* istanbul ignore next */\n if (!metadata.type('FIXED_LINE')) {\n // The rare case has been encountered where no fixedLine data is available\n // (true for some non-geographic entities), so we just check mobile.\n return checkNumberLengthForType(nationalNumber, country, 'MOBILE', metadata);\n }\n var mobile_type = metadata.type('MOBILE');\n if (mobile_type) {\n // Merge the mobile data in if there was any. \"Concat\" creates a new\n // array, it doesn't edit possible_lengths in place, so we don't need a copy.\n // Note that when adding the possible lengths from mobile, we have\n // to again check they aren't empty since if they are this indicates\n // they are the same as the general desc and should be obtained from there.\n possible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths());\n // The current list is sorted; we need to merge in the new list and\n // re-sort (duplicates are okay). Sorting isn't so expensive because\n // the lists are very small.\n\n // if (local_lengths) {\n // \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\n // } else {\n // \tlocal_lengths = mobile_type.possibleLengthsLocal()\n // }\n }\n }\n // If the type doesn't exist then return 'INVALID_LENGTH'.\n else if (type && !type_info) {\n return 'INVALID_LENGTH';\n }\n var actual_length = nationalNumber.length;\n\n // In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\n // // This is safe because there is never an overlap beween the possible lengths\n // // and the local-only lengths; this is checked at build time.\n // if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\n // {\n // \treturn 'IS_POSSIBLE_LOCAL_ONLY'\n // }\n\n var minimum_length = possible_lengths[0];\n if (minimum_length === actual_length) {\n return 'IS_POSSIBLE';\n }\n if (minimum_length > actual_length) {\n return 'TOO_SHORT';\n }\n if (possible_lengths[possible_lengths.length - 1] < actual_length) {\n return 'TOO_LONG';\n }\n\n // We skip the first element since we've already checked it.\n return possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH';\n}\n//# sourceMappingURL=checkNumberLength.js.map","import { VALID_DIGITS } from '../../constants.js';\n\n// The RFC 3966 format for extensions.\nvar RFC3966_EXTN_PREFIX = ';ext=';\n\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\nvar getExtensionDigitsPattern = function getExtensionDigitsPattern(maxLength) {\n return \"([\".concat(VALID_DIGITS, \"]{1,\").concat(maxLength, \"})\");\n};\n\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\nexport default function createExtensionPattern(purpose) {\n // We cap the maximum length of an extension based on the ambiguity of the way\n // the extension is prefixed. As per ITU, the officially allowed length for\n // extensions is actually 40, but we don't support this since we haven't seen real\n // examples and this introduces many false interpretations as the extension labels\n // are not standardized.\n /** @type {string} */\n var extLimitAfterExplicitLabel = '20';\n /** @type {string} */\n var extLimitAfterLikelyLabel = '15';\n /** @type {string} */\n var extLimitAfterAmbiguousChar = '9';\n /** @type {string} */\n var extLimitWhenNotSure = '6';\n\n /** @type {string} */\n var possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\xA0\\\\t,]*\";\n // Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\n /** @type {string} */\n var possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\xA0\\\\t,-]*\";\n /** @type {string} */\n var optionalExtnSuffix = \"#?\";\n\n // Here the extension is called out in more explicit way, i.e mentioning it obvious\n // patterns like \"ext.\".\n /** @type {string} */\n var explicitExtLabels = \"(?:e?xt(?:ensi(?:o\\u0301?|\\xF3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\n // One-character symbols that can be used to indicate an extension, and less\n // commonly used or more ambiguous extension labels.\n /** @type {string} */\n var ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\n // When extension is not separated clearly.\n /** @type {string} */\n var ambiguousSeparator = \"[- ]+\";\n // This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\n // comma as extension label may have it.\n /** @type {string} */\n var possibleSeparatorsNumberExtLabelNoComma = \"[ \\xA0\\\\t]*\";\n // \",,\" is commonly used for auto dialling the extension when connected. First\n // comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\n // not repeat it here. Semi-colon works in Iphone and Android also to pop up a\n // button with the extension number following.\n /** @type {string} */\n var autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\n\n /** @type {string} */\n var rfcExtn = RFC3966_EXTN_PREFIX + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\n /** @type {string} */\n var explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterExplicitLabel) + optionalExtnSuffix;\n /** @type {string} */\n var ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n /** @type {string} */\n var americanStyleExtnWithSuffix = ambiguousSeparator + getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\n\n /** @type {string} */\n var autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterLikelyLabel) + optionalExtnSuffix;\n /** @type {string} */\n var onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma + \"(?:,)+\" + possibleCharsAfterExtLabel + getExtensionDigitsPattern(extLimitAfterAmbiguousChar) + optionalExtnSuffix;\n\n // The first regular expression covers RFC 3966 format, where the extension is added\n // using \";ext=\". The second more generic where extension is mentioned with explicit\n // labels like \"ext:\". In both the above cases we allow more numbers in extension than\n // any other extension labels. The third one captures when single character extension\n // labels or less commonly used labels are used. In such cases we capture fewer\n // extension digits in order to reduce the chance of falsely interpreting two\n // numbers beside each other as a number + extension. The fourth one covers the\n // special case of American numbers where the extension is written with a hash\n // at the end, such as \"- 503#\". The fifth one is exclusively for extension\n // autodialling formats which are used when dialling and in this case we accept longer\n // extensions. The last one is more liberal on the number of commas that acts as\n // extension labels, so we have a strict cap on the number of digits in such extensions.\n return rfcExtn + \"|\" + explicitExtn + \"|\" + ambiguousExtn + \"|\" + americanStyleExtnWithSuffix + \"|\" + autoDiallingExtn + \"|\" + onlyCommasExtn;\n}\n//# sourceMappingURL=createExtensionPattern.js.map","import createExtensionPattern from './createExtensionPattern.js';\n\n// Regexp of all known extension prefixes used by different regions followed by\n// 1 or more valid digits, for use when parsing.\nvar EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i');\n\n// Strips any extension (as in, the part of the number dialled after the call is\n// connected, usually indicated with extn, ext, x or similar) from the end of\n// the number, and returns it.\nexport default function extractExtension(number) {\n var start = number.search(EXTN_PATTERN);\n if (start < 0) {\n return {};\n }\n // If we find a potential extension, and the number preceding this is a viable\n // number, we assume it is an extension.\n var numberWithoutExtension = number.slice(0, start);\n var matches = number.match(EXTN_PATTERN);\n var i = 1;\n while (i < matches.length) {\n if (matches[i]) {\n return {\n number: numberWithoutExtension,\n ext: matches[i]\n };\n }\n i++;\n }\n}\n//# sourceMappingURL=extractExtension.js.map","import stripIddPrefix from './stripIddPrefix.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport Metadata from '../metadata.js';\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js';\n\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\nexport default function extractCountryCallingCode(number, country, defaultCountry, defaultCallingCode, metadata) {\n if (!number) {\n return {};\n }\n var isNumberWithIddPrefix;\n\n // If this is not an international phone number,\n // then either extract an \"IDD\" prefix, or extract a\n // country calling code from a number by autocorrecting it\n // by prepending a leading `+` in cases when it starts\n // with the country calling code.\n // https://wikitravel.org/en/International_dialling_prefix\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (number[0] !== '+') {\n // Convert an \"out-of-country\" dialing phone number\n // to a proper international phone number.\n var numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadata);\n // If an IDD prefix was stripped then\n // convert the number to international one\n // for subsequent parsing.\n if (numberWithoutIDD && numberWithoutIDD !== number) {\n isNumberWithIddPrefix = true;\n number = '+' + numberWithoutIDD;\n } else {\n // Check to see if the number starts with the country calling code\n // for the default country. If so, we remove the country calling code,\n // and do some checks on the validity of the number before and after.\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n if (country || defaultCountry || defaultCallingCode) {\n var _extractCountryCallin = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n shorterNumber = _extractCountryCallin.number;\n if (countryCallingCode) {\n return {\n countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\n countryCallingCode: countryCallingCode,\n number: shorterNumber\n };\n }\n }\n return {\n // No need to set it to `UNSPECIFIED`. It can be just `undefined`.\n // countryCallingCodeSource: 'UNSPECIFIED',\n number: number\n };\n }\n }\n\n // `number` can only be international at this point.\n\n // Fast abortion: country codes do not begin with a '0'\n if (number[1] === '0') {\n return {};\n }\n metadata = new Metadata(metadata);\n\n // The thing with country phone codes\n // is that they are orthogonal to each other\n // i.e. there's no such country phone code A\n // for which country phone code B exists\n // where B starts with A.\n // Therefore, while scanning digits,\n // if a valid country code is found,\n // that means that it is the country code.\n //\n var i = 2;\n while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\n var _countryCallingCode = number.slice(1, i);\n if (metadata.hasCallingCode(_countryCallingCode)) {\n metadata.selectNumberingPlan(_countryCallingCode);\n return {\n countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\n countryCallingCode: _countryCallingCode,\n number: number.slice(i)\n };\n }\n i++;\n }\n return {};\n}\n\n// The possible values for the returned `countryCallingCodeSource` are:\n//\n// Copy-pasted from:\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\n//\n// // The source from which the country_code is derived. This is not set in the\n// // general parsing method, but in the method that parses and keeps raw_input.\n// // New fields could be added upon request.\n// enum CountryCodeSource {\n// // Default value returned if this is not set, because the phone number was\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\n// // return false if this is the case.\n// UNSPECIFIED = 0;\n//\n// // The country_code is derived based on a phone number with a leading \"+\",\n// // e.g. the French number \"+33 1 42 68 53 00\".\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\n//\n// // The country_code is derived based on a phone number with a leading IDD,\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\n// FROM_NUMBER_WITH_IDD = 5;\n//\n// // The country_code is derived based on a phone number without a leading\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\n// // supplied as France.\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\n//\n// // The country_code is derived NOT based on the phone number itself, but\n// // from the defaultCountry parameter provided in the parsing function by the\n// // clients. This happens mostly for numbers written in the national format\n// // (without country code). For example, this would be set when parsing the\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\n// // France.\n// FROM_DEFAULT_COUNTRY = 20;\n// }\n//# sourceMappingURL=extractCountryCallingCode.js.map","import Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport extractNationalNumber from './extractNationalNumber.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryCallingCode from '../getCountryCallingCode.js';\n\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(number, country, defaultCountry, defaultCallingCode, metadata) {\n var countryCallingCode = country || defaultCountry ? getCountryCallingCode(country || defaultCountry, metadata) : defaultCallingCode;\n if (number.indexOf(countryCallingCode) === 0) {\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(country || defaultCountry, countryCallingCode);\n var possibleShorterNumber = number.slice(countryCallingCode.length);\n var _extractNationalNumbe = extractNationalNumber(possibleShorterNumber, country, metadata),\n possibleShorterNationalNumber = _extractNationalNumbe.nationalNumber;\n var _extractNationalNumbe2 = extractNationalNumber(number, country, metadata),\n nationalNumber = _extractNationalNumbe2.nationalNumber;\n\n // If the number was not valid before but is valid now,\n // or if it was too long before, we consider the number\n // with the country calling code stripped to be a better result\n // and keep that instead.\n // For example, in Germany (+49), `49` is a valid area code,\n // so if a number starts with `49`, it could be both a valid\n // national German number or an international number without\n // a leading `+`.\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) && matchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern()) || checkNumberLength(nationalNumber, country, metadata) === 'TOO_LONG') {\n return {\n countryCallingCode: countryCallingCode,\n number: possibleShorterNumber\n };\n }\n }\n return {\n number: number\n };\n}\n//# sourceMappingURL=extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js.map","import extractPhoneContext, { isPhoneContextValid, PLUS_SIGN, RFC3966_PREFIX_, RFC3966_PHONE_CONTEXT_, RFC3966_ISDN_SUBADDRESS_ } from './extractPhoneContext.js';\nimport ParseError from '../ParseError.js';\n\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, _ref) {\n var extractFormattedPhoneNumber = _ref.extractFormattedPhoneNumber;\n var phoneContext = extractPhoneContext(numberToParse);\n if (!isPhoneContextValid(phoneContext)) {\n throw new ParseError('NOT_A_NUMBER');\n }\n var phoneNumberString;\n if (phoneContext === null) {\n // Extract a possible number from the string passed in.\n // (this strips leading characters that could not be the start of a phone number)\n phoneNumberString = extractFormattedPhoneNumber(numberToParse) || '';\n } else {\n phoneNumberString = '';\n\n // If the phone context contains a phone number prefix, we need to capture\n // it, whereas domains will be ignored.\n if (phoneContext.charAt(0) === PLUS_SIGN) {\n phoneNumberString += phoneContext;\n }\n\n // Now append everything between the \"tel:\" prefix and the phone-context.\n // This should include the national number, an optional extension or\n // isdn-subaddress component. Note we also handle the case when \"tel:\" is\n // missing, as we have seen in some of the phone number inputs.\n // In that case, we append everything from the beginning.\n var indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_);\n var indexOfNationalNumber;\n // RFC 3966 \"tel:\" prefix is preset at this stage because\n // `isPhoneContextValid()` requires it to be present.\n /* istanbul ignore else */\n if (indexOfRfc3966Prefix >= 0) {\n indexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length;\n } else {\n indexOfNationalNumber = 0;\n }\n var indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_);\n phoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext);\n }\n\n // Delete the isdn-subaddress and everything after it if it is present.\n // Note extension won't appear at the same time with isdn-subaddress\n // according to paragraph 5.3 of the RFC3966 spec.\n var indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_);\n if (indexOfIsdn > 0) {\n phoneNumberString = phoneNumberString.substring(0, indexOfIsdn);\n }\n // If both phone context and isdn-subaddress are absent but other\n // parameters are present, the parameters are left in nationalNumber.\n // This is because we are concerned about deleting content from a potential\n // number string when there is no strong evidence that the number is\n // actually written in RFC3966.\n\n if (phoneNumberString !== '') {\n return phoneNumberString;\n }\n}\n//# sourceMappingURL=extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js.map","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport matchesEntirely from './matchesEntirely.js';\nimport checkNumberLength from './checkNumberLength.js';\nimport getCountryByCallingCode from './getCountryByCallingCode.js';\n\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Country, if known.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\nexport default function extractNationalNumber(number, country, metadata) {\n // Parsing national prefixes and carrier codes\n // is only required for local phone numbers\n // but some people don't understand that\n // and sometimes write international phone numbers\n // with national prefixes (or maybe even carrier codes).\n // http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\n // Google's original library forgives such mistakes\n // and so does this library, because it has been requested:\n // https://github.com/catamphetamine/libphonenumber-js/issues/127\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(number, metadata),\n carrierCode = _extractNationalNumbe.carrierCode,\n nationalNumber = _extractNationalNumbe.nationalNumber;\n if (nationalNumber !== number) {\n if (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n // Check the national (significant) number length after extracting national prefix and carrier code.\n // Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature.\n if (metadata.numberingPlan.possibleLengths()) {\n // If an exact `country` is not specified, attempt to detect it from the assumed national number.\n if (!country) {\n country = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n }\n\n // The number remaining after stripping the national prefix and carrier code\n // should be long enough to have a possible length for the country.\n // Otherwise, don't strip the national prefix and carrier code,\n // since the original number could be a valid number.\n // This check has been copy-pasted \"as is\" from Google's original library:\n // https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\n // It doesn't check for the \"possibility\" of the original `number`.\n // I guess it's fine not checking that one. It works as is anyway.\n if (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\n // Don't strip the national prefix.\n return {\n nationalNumber: number\n };\n }\n }\n }\n return {\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n\n// In some countries, the same digit could be a national prefix\n// or a leading digit of a valid phone number.\n// For example, in Russia, national prefix is `8`,\n// and also `800 555 35 35` is a valid number\n// in which `8` is not a national prefix, but the first digit\n// of a national (significant) number.\n// Same's with Belarus:\n// `82004910060` is a valid national (significant) number,\n// but `2004910060` is not.\n// To support such cases (to prevent the code from always stripping\n// national prefix), a condition is imposed: a national prefix\n// is not extracted when the original number is \"viable\" and the\n// resultant number is not, a \"viable\" national number being the one\n// that matches `national_number_pattern`.\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\n // The equivalent in Google's code is:\n // https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\n if (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) && !matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\n return false;\n }\n // This \"is possible\" national number (length) check has been commented out\n // because it's superceded by the (effectively) same check done in the\n // `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\n // In other words, why run the same check twice if it could only be run once.\n // // Check the national (significant) number length after extracting national prefix and carrier code.\n // // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\n // // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\n // if (metadata.possibleLengths()) {\n // \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\n // \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\n // \t\treturn false\n // \t}\n // }\n return true;\n}\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'TOO_SHORT':\n case 'INVALID_LENGTH':\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n return false;\n default:\n return true;\n }\n}\n//# sourceMappingURL=extractNationalNumber.js.map","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\n if (number && metadata.numberingPlan.nationalPrefixForParsing()) {\n // See METADATA.md for the description of\n // `national_prefix_for_parsing` and `national_prefix_transform_rule`.\n // Attempt to parse the first digits as a national prefix.\n var prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')');\n var prefixMatch = prefixPattern.exec(number);\n if (prefixMatch) {\n var nationalNumber;\n var carrierCode;\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n // If a `national_prefix_for_parsing` has any \"capturing groups\"\n // then it means that the national (significant) number is equal to\n // those \"capturing groups\" transformed via `national_prefix_transform_rule`,\n // and nothing could be said about the actual national prefix:\n // what is it and was it even there.\n // If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\n // then everything it matches is a national prefix.\n // To determine whether `national_prefix_for_parsing` matched any\n // \"capturing groups\", the value of the result of calling `.exec()`\n // is looked at, and if it has non-undefined values where there're\n // \"capturing groups\" in the regular expression, then it means\n // that \"capturing groups\" have been matched.\n // It's not possible to tell whether there'll be any \"capturing gropus\"\n // before the matching process, because a `national_prefix_for_parsing`\n // could exhibit both behaviors.\n var capturedGroupsCount = prefixMatch.length - 1;\n var hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount];\n if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\n nationalNumber = number.replace(prefixPattern, metadata.nationalPrefixTransformRule());\n // If there's more than one captured group,\n // then carrier code is the second one.\n if (capturedGroupsCount > 1) {\n carrierCode = prefixMatch[1];\n }\n }\n // If there're no \"capturing groups\",\n // or if there're \"capturing groups\" but no\n // `national_prefix_transform_rule`,\n // then just strip the national prefix from the number,\n // and possibly a carrier code.\n // Seems like there could be more.\n else {\n // `prefixBeforeNationalNumber` is the whole substring matched by\n // the `national_prefix_for_parsing` regular expression.\n // There seem to be no guarantees that it's just a national prefix.\n // For example, if there's a carrier code, it's gonna be a\n // part of `prefixBeforeNationalNumber` too.\n var prefixBeforeNationalNumber = prefixMatch[0];\n nationalNumber = number.slice(prefixBeforeNationalNumber.length);\n // If there's at least one captured group,\n // then carrier code is the first one.\n if (hasCapturedGroups) {\n carrierCode = prefixMatch[1];\n }\n }\n // Tries to guess whether a national prefix was present in the input.\n // This is not something copy-pasted from Google's library:\n // they don't seem to have an equivalent for that.\n // So this isn't an \"officially approved\" way of doing something like that.\n // But since there seems no other existing method, this library uses it.\n var nationalPrefix;\n if (hasCapturedGroups) {\n var possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1]);\n var possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup);\n // Example: an Argentinian (AR) phone number `0111523456789`.\n // `prefixMatch[0]` is `01115`, and `$1` is `11`,\n // and the rest of the phone number is `23456789`.\n // The national number is transformed via `9$1` to `91123456789`.\n // National prefix `0` is detected being present at the start.\n // if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\n if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\n nationalPrefix = metadata.numberingPlan.nationalPrefix();\n }\n } else {\n nationalPrefix = prefixMatch[0];\n }\n return {\n nationalNumber: nationalNumber,\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode\n };\n }\n }\n return {\n nationalNumber: number\n };\n}\n//# sourceMappingURL=extractNationalNumberFromPossiblyIncompleteNumber.js.map","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\n// Example: `\"tel:12133734253;phone-context=+1\"`.\n// This function parses the full phone number from the local number and the `phone-context`\n// when the `phone-context` contains a `+` sign.\n\nimport { VALID_DIGITS\n// PLUS_CHARS\n} from '../constants.js';\nexport var PLUS_SIGN = '+';\nvar RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?';\nvar RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')';\nvar RFC3966_GLOBAL_NUMBER_DIGITS_ = '^' + '\\\\' + PLUS_SIGN + RFC3966_PHONE_DIGIT_ + '*' + '[' + VALID_DIGITS + ']' + RFC3966_PHONE_DIGIT_ + '*' + '$';\n\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\nvar RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g');\n\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\nvar ALPHANUM_ = VALID_DIGITS;\nvar RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar VALID_ALPHA_ = 'a-zA-Z';\nvar RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*';\nvar RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$';\n\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\nvar RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g');\nexport var RFC3966_PREFIX_ = 'tel:';\nexport var RFC3966_PHONE_CONTEXT_ = ';phone-context=';\nexport var RFC3966_ISDN_SUBADDRESS_ = ';isub=';\n\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\nexport default function extractPhoneContext(numberToExtractFrom) {\n var indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_);\n // If no phone-context parameter is present\n if (indexOfPhoneContext < 0) {\n return null;\n }\n var phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length;\n // If phone-context parameter is empty\n if (phoneContextStart >= numberToExtractFrom.length) {\n return '';\n }\n var phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart);\n // If phone-context is not the last parameter\n if (phoneContextEnd >= 0) {\n return numberToExtractFrom.substring(phoneContextStart, phoneContextEnd);\n } else {\n return numberToExtractFrom.substring(phoneContextStart);\n }\n}\n\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\nexport function isPhoneContextValid(phoneContext) {\n if (phoneContext === null) {\n return true;\n }\n if (phoneContext.length === 0) {\n return false;\n }\n\n // Does phone-context value match pattern of global-number-digits or domainname.\n return RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) || RFC3966_DOMAINNAME_PATTERN_.test(phoneContext);\n}\n//# sourceMappingURL=extractPhoneContext.js.map","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js';\n\n// This was originally set to $1 but there are some countries for which the\n// first group is not used in the national pattern (e.g. Argentina) so the $1\n// group does not match correctly. Therefore, we use `\\d`, so that the first\n// group actually used in the pattern will be matched.\nexport var FIRST_GROUP_PATTERN = /(\\$\\d)/;\nexport default function formatNationalNumberUsingFormat(number, format, _ref) {\n var useInternationalFormat = _ref.useInternationalFormat,\n withNationalPrefix = _ref.withNationalPrefix,\n carrierCode = _ref.carrierCode,\n metadata = _ref.metadata;\n var formattedNumber = number.replace(new RegExp(format.pattern()), useInternationalFormat ? format.internationalFormat() :\n // This library doesn't use `domestic_carrier_code_formatting_rule`,\n // because that one is only used when formatting phone numbers\n // for dialing from a mobile phone, and this is not a dialing library.\n // carrierCode && format.domesticCarrierCodeFormattingRule()\n // \t// First, replace the $CC in the formatting rule with the desired carrier code.\n // \t// Then, replace the $FG in the formatting rule with the first group\n // \t// and the carrier code combined in the appropriate way.\n // \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\n // \t: (\n // \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\n // \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\n // \t\t\t: format.format()\n // \t)\n withNationalPrefix && format.nationalPrefixFormattingRule() ? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule()) : format.format());\n if (useInternationalFormat) {\n return applyInternationalSeparatorStyle(formattedNumber);\n }\n return formattedNumber;\n}\n//# sourceMappingURL=formatNationalNumberUsingFormat.js.map","import getCountryByNationalNumber from './getCountryByNationalNumber.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Returns the exact country for the `nationalNumber`\n// that belongs to the specified \"country calling code\".\nexport default function getCountryByCallingCode(callingCode, _ref) {\n var nationalPhoneNumber = _ref.nationalNumber,\n metadata = _ref.metadata;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(callingCode)) {\n return '001';\n }\n }\n var possibleCountries = metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return;\n }\n // If there's just one country corresponding to the country code,\n // then just return it, without further phone number digits validation.\n if (possibleCountries.length === 1) {\n return possibleCountries[0];\n }\n return getCountryByNationalNumber(nationalPhoneNumber, {\n countries: possibleCountries,\n metadata: metadata.metadata\n });\n}\n//# sourceMappingURL=getCountryByCallingCode.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport getNumberType from './getNumberType.js';\n\n// Returns the exact country that the `nationalPhoneNumber` belongs to\n// in cases of ambiguity, i.e. when multiple countries share the same \"country calling code\".\nexport default function getCountryByNationalNumber(nationalPhoneNumber, _ref) {\n var countries = _ref.countries,\n metadata = _ref.metadata;\n // Re-create `metadata` because it will be selecting a `country`.\n metadata = new Metadata(metadata);\n\n // const matchingCountries = []\n\n for (var _iterator = _createForOfIteratorHelperLoose(countries), _step; !(_step = _iterator()).done;) {\n var country = _step.value;\n metadata.selectNumberingPlan(country);\n // \"Leading digits\" patterns are only defined for about 20% of all countries.\n // By definition, matching \"leading digits\" is a sufficient but not a necessary\n // condition for a phone number to belong to a country.\n // The point of \"leading digits\" check is that it's the fastest one to get a match.\n // https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\n // I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\n // because of the intended use of that feature.\n if (metadata.leadingDigits()) {\n if (nationalPhoneNumber && nationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\n return country;\n }\n }\n // Else perform full validation with all of those\n // fixed-line/mobile/etc regular expressions.\n else if (getNumberType({\n phone: nationalPhoneNumber,\n country: country\n }, undefined, metadata.metadata)) {\n // When multiple countries share the same \"country calling code\",\n // type patterns aren't guaranteed to be unique among them.\n // For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\n //\n // That means that this `if` condition could be `true` for multiple countries from the list.\n // Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\n // In an example with `toll_free` numbers above, `\"US\"` would be returned even though\n // it could as well be `\"CA\"`.\n //\n // There was also a time when this attempted to be overly smart\n // and kept track of all such multiple matching countries\n // and then picked the one that matched the `defaultCountry`, if provided.\n // For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\n // it would've returned `\"CA\"` instead of `\"US\"`.\n // Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\n // so this \"overly smart\" country detection was reverted to returning the \"main\" country\n // for the \"country calling code\".\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\n //\n return country;\n //\n // The \"overly smart\" behavior code:\n //\n // if (defaultCountry) {\n // \tif (country === defaultCountry) {\n // \t\treturn country\n // \t} else {\n // \t\tmatchingCountries.push(country)\n // \t}\n // } else {\n // \treturn country\n // }\n }\n }\n\n // // Return the first (\"main\") one of the `matchingCountries`.\n // if (matchingCountries.length > 0) {\n // \treturn matchingCountries[0]\n // }\n}\n//# sourceMappingURL=getCountryByNationalNumber.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\nvar SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/;\n\n// For regions that have multiple IDD prefixes\n// a preferred IDD prefix is returned.\nexport default function getIddPrefix(country, callingCode, metadata) {\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n if (countryMetadata.defaultIDDPrefix()) {\n return countryMetadata.defaultIDDPrefix();\n }\n if (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\n return countryMetadata.IDDPrefix();\n }\n}\n//# sourceMappingURL=getIddPrefix.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport Metadata from '../metadata.js';\nimport matchesEntirely from './matchesEntirely.js';\nvar NON_FIXED_LINE_PHONE_TYPES = ['MOBILE', 'PREMIUM_RATE', 'TOLL_FREE', 'SHARED_COST', 'VOIP', 'PERSONAL_NUMBER', 'PAGER', 'UAN', 'VOICEMAIL'];\n\n// Finds out national phone number type (fixed line, mobile, etc)\nexport default function getNumberType(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n\n // When `parse()` returns an empty object — `{}` —\n // that means that the phone number is malformed,\n // so it can't possibly be valid.\n if (!input.country && !input.countryCallingCode) {\n return;\n }\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n\n // The following is copy-pasted from the original function:\n // https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\n\n // Is this national number even valid for this country\n if (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\n return;\n }\n\n // Is it fixed line number\n if (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\n // Because duplicate regular expressions are removed\n // to reduce metadata size, if \"mobile\" pattern is \"\"\n // then it means it was removed due to being a duplicate of the fixed-line pattern.\n //\n if (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\n // For example, for \"US\" country.\n // Old metadata (< `1.0.18`) had a specific \"types\" data structure\n // that happened to be `undefined` for `MOBILE` in that case.\n // Newer metadata (>= `1.0.18`) has another data structure that is\n // not `undefined` for `MOBILE` in that case (it's just an empty array).\n // So this `if` is just for backwards compatibility with old metadata.\n if (!metadata.type('MOBILE')) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n\n // Check if the number happens to qualify as both fixed line and mobile.\n // (no such country in the minimal metadata set)\n /* istanbul ignore if */\n if (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\n return 'FIXED_LINE_OR_MOBILE';\n }\n return 'FIXED_LINE';\n }\n for (var _iterator = _createForOfIteratorHelperLoose(NON_FIXED_LINE_PHONE_TYPES), _step; !(_step = _iterator()).done;) {\n var type = _step.value;\n if (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\n return type;\n }\n }\n}\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\n type = metadata.type(type);\n if (!type || !type.pattern()) {\n return false;\n }\n // Check if any possible number lengths are present;\n // if so, we use them to avoid checking\n // the validation pattern if they don't match.\n // If they are absent, this means they match\n // the general description, which we have\n // already checked before a specific number type.\n if (type.possibleLengths() && type.possibleLengths().indexOf(nationalNumber.length) < 0) {\n return false;\n }\n return matchesEntirely(nationalNumber, type.pattern());\n}\n//# sourceMappingURL=getNumberType.js.map","import Metadata from '../metadata.js';\n\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\n var _metadata = new Metadata(metadata);\n var possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode);\n if (!possibleCountries) {\n return [];\n }\n return possibleCountries.filter(function (country) {\n return couldNationalNumberBelongToCountry(nationalNumber, country, metadata);\n });\n}\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadata) {\n var _metadata = new Metadata(metadata);\n _metadata.selectNumberingPlan(country);\n if (_metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=getPossibleCountriesForNumber.js.map","var objectConstructor = {}.constructor;\nexport default function isObject(object) {\n return object !== undefined && object !== null && object.constructor === objectConstructor;\n}\n//# sourceMappingURL=isObject.js.map","import { MIN_LENGTH_FOR_NSN, VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from '../constants.js';\nimport createExtensionPattern from './extension/createExtensionPattern.js';\n\n// Regular expression of viable phone numbers. This is location independent.\n// Checks we have at least three leading digits, and only valid punctuation,\n// alpha characters and digits in the phone number. Does not include extension\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\n// used as a placeholder for carrier codes, for example in Brazilian phone\n// numbers. We also allow multiple '+' characters at the start.\n//\n// Corresponds to the following:\n// [digits]{minLengthNsn}|\n// plus_sign*\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\n//\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\n// The second expression restricts the number of digits to three or more, but\n// then allows them to be in international form, and to have alpha-characters\n// and punctuation. We split up the two reg-exes here and combine them when\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\n// with ^ and append $ to each branch.\n//\n// \"Note VALID_PUNCTUATION starts with a -,\n// so must be the first in the range\" (c) Google devs.\n// (wtf did they mean by saying that; probably nothing)\n//\nvar MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}';\n//\n// And this is the second reg-exp:\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\n//\nexport var VALID_PHONE_NUMBER = '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){3,}' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*';\n\n// This regular expression isn't present in Google's `libphonenumber`\n// and is only used to determine whether the phone number being input\n// is too short for it to even consider it a \"valid\" number.\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nvar VALID_PHONE_NUMBER_START_REG_EXP = new RegExp('^' + '[' + PLUS_CHARS + ']{0,1}' + '(?:' + '[' + VALID_PUNCTUATION + ']*' + '[' + VALID_DIGITS + ']' + '){1,2}' + '$', 'i');\nexport var VALID_PHONE_NUMBER_WITH_EXTENSION = VALID_PHONE_NUMBER +\n// Phone number extensions\n'(?:' + createExtensionPattern() + ')?';\n\n// The combined regular expression for valid phone numbers:\n//\nvar VALID_PHONE_NUMBER_PATTERN = new RegExp(\n// Either a short two-digit-only phone number\n'^' + MIN_LENGTH_PHONE_NUMBER_PATTERN + '$' + '|' +\n// Or a longer fully parsed phone number (min 3 characters)\n'^' + VALID_PHONE_NUMBER_WITH_EXTENSION + '$', 'i');\n\n// Checks to see if the string of characters could possibly be a phone number at\n// all. At the moment, checks to see that the string begins with at least 2\n// digits, ignoring any punctuation commonly found in phone numbers. This method\n// does not require the number to be normalized in advance - but does assume\n// that leading non-number symbols have been removed, such as by the method\n// `extract_possible_number`.\n//\nexport default function isViablePhoneNumber(number) {\n return number.length >= MIN_LENGTH_FOR_NSN && VALID_PHONE_NUMBER_PATTERN.test(number);\n}\n\n// This is just a way to differentiate between a really invalid phone\n// number like \"abcde\" and a valid phone number that a user has just\n// started inputting, like \"+1\" or \"1\": both these cases would be\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\n// library can provide a more detailed error message — whether it's\n// really \"not a number\", or is it just a start of a valid phone number.\nexport function isViablePhoneNumberStart(number) {\n return VALID_PHONE_NUMBER_START_REG_EXP.test(number);\n}\n//# sourceMappingURL=isViablePhoneNumber.js.map","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\nexport default function matchesEntirely(text, regularExpressionText) {\n // If the assigning of the `''` default value is moved to the arguments above,\n // the code coverage would decrease for some weird reason.\n text = text || '';\n return new RegExp('^(?:' + regularExpressionText + ')$').test(text);\n}\n//# sourceMappingURL=matchesEntirely.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\nexport default function mergeArrays(a, b) {\n var merged = a.slice();\n for (var _iterator = _createForOfIteratorHelperLoose(b), _step; !(_step = _iterator()).done;) {\n var element = _step.value;\n if (a.indexOf(element) < 0) {\n merged.push(element);\n }\n }\n return merged.sort(function (a, b) {\n return a - b;\n });\n\n // ES6 version, requires Set polyfill.\n // let merged = new Set(a)\n // for (const element of b) {\n // \tmerged.add(i)\n // }\n // return Array.from(merged).sort((a, b) => a - b)\n}\n//# sourceMappingURL=mergeArrays.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// These mappings map a character (key) to a specific digit that should\n// replace it for normalization purposes. Non-European digits that\n// may be used in phone numbers are mapped to a European equivalent.\n//\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\n//\nexport var DIGITS = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n \"\\uFF10\": '0',\n // Fullwidth digit 0\n \"\\uFF11\": '1',\n // Fullwidth digit 1\n \"\\uFF12\": '2',\n // Fullwidth digit 2\n \"\\uFF13\": '3',\n // Fullwidth digit 3\n \"\\uFF14\": '4',\n // Fullwidth digit 4\n \"\\uFF15\": '5',\n // Fullwidth digit 5\n \"\\uFF16\": '6',\n // Fullwidth digit 6\n \"\\uFF17\": '7',\n // Fullwidth digit 7\n \"\\uFF18\": '8',\n // Fullwidth digit 8\n \"\\uFF19\": '9',\n // Fullwidth digit 9\n \"\\u0660\": '0',\n // Arabic-indic digit 0\n \"\\u0661\": '1',\n // Arabic-indic digit 1\n \"\\u0662\": '2',\n // Arabic-indic digit 2\n \"\\u0663\": '3',\n // Arabic-indic digit 3\n \"\\u0664\": '4',\n // Arabic-indic digit 4\n \"\\u0665\": '5',\n // Arabic-indic digit 5\n \"\\u0666\": '6',\n // Arabic-indic digit 6\n \"\\u0667\": '7',\n // Arabic-indic digit 7\n \"\\u0668\": '8',\n // Arabic-indic digit 8\n \"\\u0669\": '9',\n // Arabic-indic digit 9\n \"\\u06F0\": '0',\n // Eastern-Arabic digit 0\n \"\\u06F1\": '1',\n // Eastern-Arabic digit 1\n \"\\u06F2\": '2',\n // Eastern-Arabic digit 2\n \"\\u06F3\": '3',\n // Eastern-Arabic digit 3\n \"\\u06F4\": '4',\n // Eastern-Arabic digit 4\n \"\\u06F5\": '5',\n // Eastern-Arabic digit 5\n \"\\u06F6\": '6',\n // Eastern-Arabic digit 6\n \"\\u06F7\": '7',\n // Eastern-Arabic digit 7\n \"\\u06F8\": '8',\n // Eastern-Arabic digit 8\n \"\\u06F9\": '9' // Eastern-Arabic digit 9\n};\nexport function parseDigit(character) {\n return DIGITS[character];\n}\n\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\nexport default function parseDigits(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n var digit = parseDigit(character);\n if (digit) {\n result += digit;\n }\n }\n return result;\n}\n//# sourceMappingURL=parseDigits.js.map","import Metadata from '../metadata.js';\nimport { VALID_DIGITS } from '../constants.js';\nvar CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])');\nexport default function stripIddPrefix(number, country, callingCode, metadata) {\n if (!country) {\n return;\n }\n // Check if the number is IDD-prefixed.\n var countryMetadata = new Metadata(metadata);\n countryMetadata.selectNumberingPlan(country, callingCode);\n var IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix());\n if (number.search(IDDPrefixPattern) !== 0) {\n return;\n }\n // Strip IDD prefix.\n number = number.slice(number.match(IDDPrefixPattern)[0].length);\n // If there're any digits after an IDD prefix,\n // then those digits are a country calling code.\n // Since no country code starts with a `0`,\n // the code below validates that the next digit (if present) is not `0`.\n var matchedGroups = number.match(CAPTURING_DIGIT_PATTERN);\n if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\n if (matchedGroups[1] === '0') {\n return;\n }\n }\n return number;\n}\n//# sourceMappingURL=stripIddPrefix.js.map","import Metadata from './metadata.js';\nimport checkNumberLength from './helpers/checkNumberLength.js';\n\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\nexport default function isPossiblePhoneNumber(input, options, metadata) {\n /* istanbul ignore if */\n if (options === undefined) {\n options = {};\n }\n metadata = new Metadata(metadata);\n if (options.v2) {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n } else {\n if (!input.phone) {\n return false;\n }\n if (input.country) {\n if (!metadata.hasCountry(input.country)) {\n throw new Error(\"Unknown country: \".concat(input.country));\n }\n metadata.selectNumberingPlan(input.country);\n } else {\n if (!input.countryCallingCode) {\n throw new Error('Invalid phone number object passed');\n }\n metadata.selectNumberingPlan(input.countryCallingCode);\n }\n }\n\n // Old metadata (< 1.0.18) had no \"possible length\" data.\n if (metadata.possibleLengths()) {\n return isPossibleNumber(input.phone || input.nationalNumber, input.country, metadata);\n } else {\n // There was a bug between `1.7.35` and `1.7.37` where \"possible_lengths\"\n // were missing for \"non-geographical\" numbering plans.\n // Just assume the number is possible in such cases:\n // it's unlikely that anyone generated their custom metadata\n // in that short period of time (one day).\n // This code can be removed in some future major version update.\n if (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\n // \"Non-geographic entities\" did't have `possibleLengths`\n // due to a bug in metadata generation process.\n return true;\n } else {\n throw new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\n }\n }\n}\nexport function isPossibleNumber(nationalNumber, country, metadata) {\n //, isInternational) {\n switch (checkNumberLength(nationalNumber, country, metadata)) {\n case 'IS_POSSIBLE':\n return true;\n // This library ignores \"local-only\" phone numbers (for simplicity).\n // See the readme for more info on what are \"local-only\" phone numbers.\n // case 'IS_POSSIBLE_LOCAL_ONLY':\n // \treturn !isInternational\n default:\n return false;\n }\n}\n//# sourceMappingURL=isPossible.js.map","import Metadata from './metadata.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport getNumberType from './helpers/getNumberType.js';\n\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\nexport default function isValidNumber(input, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n metadata.selectNumberingPlan(input.country, input.countryCallingCode);\n\n // By default, countries only have type regexps when it's required for\n // distinguishing different countries having the same `countryCallingCode`.\n if (metadata.hasTypes()) {\n return getNumberType(input, options, metadata.metadata) !== undefined;\n }\n\n // If there are no type regexps for this country in metadata then use\n // `nationalNumberPattern` as a \"better than nothing\" replacement.\n var nationalNumber = options.v2 ? input.nationalNumber : input.phone;\n return matchesEntirely(nationalNumber, metadata.nationalNumberPattern());\n}\n//# sourceMappingURL=isValid.js.map","function _readOnlyError(r) { throw new TypeError('\"' + r + '\" is read-only'); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport compare from './tools/semver-compare.js';\nimport isObject from './helpers/isObject.js';\n\n// Added \"possibleLengths\" and renamed\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\nvar V2 = '1.0.18';\n\n// Added \"idd_prefix\" and \"default_idd_prefix\".\nvar V3 = '1.2.0';\n\n// Moved `001` country code to \"nonGeographic\" section of metadata.\nvar V4 = '1.7.35';\nvar DEFAULT_EXT_PREFIX = ' ext. ';\nvar CALLING_CODE_REG_EXP = /^\\d+$/;\n\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\nvar Metadata = /*#__PURE__*/function () {\n function Metadata(metadata) {\n _classCallCheck(this, Metadata);\n validateMetadata(metadata);\n this.metadata = metadata;\n setVersion.call(this, metadata);\n }\n return _createClass(Metadata, [{\n key: \"getCountries\",\n value: function getCountries() {\n return Object.keys(this.metadata.countries).filter(function (_) {\n return _ !== '001';\n });\n }\n }, {\n key: \"getCountryMetadata\",\n value: function getCountryMetadata(countryCode) {\n return this.metadata.countries[countryCode];\n }\n }, {\n key: \"nonGeographic\",\n value: function nonGeographic() {\n if (this.v1 || this.v2 || this.v3) return;\n // `nonGeographical` was a typo.\n // It's present in metadata generated from `1.7.35` to `1.7.37`.\n // The test case could be found by searching for \"nonGeographical\".\n return this.metadata.nonGeographic || this.metadata.nonGeographical;\n }\n }, {\n key: \"hasCountry\",\n value: function hasCountry(country) {\n return this.getCountryMetadata(country) !== undefined;\n }\n }, {\n key: \"hasCallingCode\",\n value: function hasCallingCode(callingCode) {\n if (this.getCountryCodesForCallingCode(callingCode)) {\n return true;\n }\n if (this.nonGeographic()) {\n if (this.nonGeographic()[callingCode]) {\n return true;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return true;\n }\n }\n }\n }, {\n key: \"isNonGeographicCallingCode\",\n value: function isNonGeographicCallingCode(callingCode) {\n if (this.nonGeographic()) {\n return this.nonGeographic()[callingCode] ? true : false;\n } else {\n return this.getCountryCodesForCallingCode(callingCode) ? false : true;\n }\n }\n\n // Deprecated.\n }, {\n key: \"country\",\n value: function country(countryCode) {\n return this.selectNumberingPlan(countryCode);\n }\n }, {\n key: \"selectNumberingPlan\",\n value: function selectNumberingPlan(countryCode, callingCode) {\n // Supports just passing `callingCode` as the first argument.\n if (countryCode && CALLING_CODE_REG_EXP.test(countryCode)) {\n callingCode = countryCode;\n countryCode = null;\n }\n if (countryCode && countryCode !== '001') {\n if (!this.hasCountry(countryCode)) {\n throw new Error(\"Unknown country: \".concat(countryCode));\n }\n this.numberingPlan = new NumberingPlan(this.getCountryMetadata(countryCode), this);\n } else if (callingCode) {\n if (!this.hasCallingCode(callingCode)) {\n throw new Error(\"Unknown calling code: \".concat(callingCode));\n }\n this.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this);\n } else {\n this.numberingPlan = undefined;\n }\n return this;\n }\n }, {\n key: \"getCountryCodesForCallingCode\",\n value: function getCountryCodesForCallingCode(callingCode) {\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes) {\n // Metadata before V4 included \"non-geographic entity\" calling codes\n // inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\n // Now the semantics of `country_calling_codes` has changed:\n // it's specifically for \"countries\" now.\n // Older versions of custom metadata will simply skip parsing\n // \"non-geographic entity\" phone numbers with new versions\n // of this library: it's not considered a bug,\n // because such numbers are extremely rare,\n // and developers extremely rarely use custom metadata.\n if (countryCodes.length === 1 && countryCodes[0].length === 3) {\n return;\n }\n return countryCodes;\n }\n }\n }, {\n key: \"getCountryCodeForCallingCode\",\n value: function getCountryCodeForCallingCode(callingCode) {\n var countryCodes = this.getCountryCodesForCallingCode(callingCode);\n if (countryCodes) {\n return countryCodes[0];\n }\n }\n }, {\n key: \"getNumberingPlanMetadata\",\n value: function getNumberingPlanMetadata(callingCode) {\n var countryCode = this.getCountryCodeForCallingCode(callingCode);\n if (countryCode) {\n return this.getCountryMetadata(countryCode);\n }\n if (this.nonGeographic()) {\n var metadata = this.nonGeographic()[callingCode];\n if (metadata) {\n return metadata;\n }\n } else {\n // A hacky workaround for old custom metadata (generated before V4).\n // In that metadata, there was no concept of \"non-geographic\" metadata\n // so metadata for `001` country code was stored along with other countries.\n // The test case can be found by searching for:\n // \"should work around `nonGeographic` metadata not existing\".\n var countryCodes = this.countryCallingCodes()[callingCode];\n if (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\n return this.metadata.countries['001'];\n }\n }\n }\n\n // Deprecated.\n }, {\n key: \"countryCallingCode\",\n value: function countryCallingCode() {\n return this.numberingPlan.callingCode();\n }\n\n // Deprecated.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n return this.numberingPlan.IDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n return this.numberingPlan.defaultIDDPrefix();\n }\n\n // Deprecated.\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n return this.numberingPlan.nationalNumberPattern();\n }\n\n // Deprecated.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n return this.numberingPlan.possibleLengths();\n }\n\n // Deprecated.\n }, {\n key: \"formats\",\n value: function formats() {\n return this.numberingPlan.formats();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n return this.numberingPlan.nationalPrefixForParsing();\n }\n\n // Deprecated.\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.numberingPlan.nationalPrefixTransformRule();\n }\n\n // Deprecated.\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.numberingPlan.leadingDigits();\n }\n\n // Deprecated.\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n return this.numberingPlan.hasTypes();\n }\n\n // Deprecated.\n }, {\n key: \"type\",\n value: function type(_type) {\n return this.numberingPlan.type(_type);\n }\n\n // Deprecated.\n }, {\n key: \"ext\",\n value: function ext() {\n return this.numberingPlan.ext();\n }\n }, {\n key: \"countryCallingCodes\",\n value: function countryCallingCodes() {\n if (this.v1) return this.metadata.country_phone_code_to_countries;\n return this.metadata.country_calling_codes;\n }\n\n // Deprecated.\n }, {\n key: \"chooseCountryByCountryCallingCode\",\n value: function chooseCountryByCountryCallingCode(callingCode) {\n return this.selectNumberingPlan(callingCode);\n }\n }, {\n key: \"hasSelectedNumberingPlan\",\n value: function hasSelectedNumberingPlan() {\n return this.numberingPlan !== undefined;\n }\n }]);\n}();\nexport { Metadata as default };\nvar NumberingPlan = /*#__PURE__*/function () {\n function NumberingPlan(metadata, globalMetadataObject) {\n _classCallCheck(this, NumberingPlan);\n this.globalMetadataObject = globalMetadataObject;\n this.metadata = metadata;\n setVersion.call(this, globalMetadataObject.metadata);\n }\n return _createClass(NumberingPlan, [{\n key: \"callingCode\",\n value: function callingCode() {\n return this.metadata[0];\n }\n\n // Formatting information for regions which share\n // a country calling code is contained by only one region\n // for performance reasons. For example, for NANPA region\n // (\"North American Numbering Plan Administration\",\n // which includes USA, Canada, Cayman Islands, Bahamas, etc)\n // it will be contained in the metadata for `US`.\n }, {\n key: \"getDefaultCountryMetadataForRegion\",\n value: function getDefaultCountryMetadataForRegion() {\n return this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode());\n }\n\n // Is always present.\n }, {\n key: \"IDDPrefix\",\n value: function IDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[1];\n }\n\n // Is only present when a country supports multiple IDD prefixes.\n }, {\n key: \"defaultIDDPrefix\",\n value: function defaultIDDPrefix() {\n if (this.v1 || this.v2) return;\n return this.metadata[12];\n }\n }, {\n key: \"nationalNumberPattern\",\n value: function nationalNumberPattern() {\n if (this.v1 || this.v2) return this.metadata[1];\n return this.metadata[2];\n }\n\n // \"possible length\" data is always present in Google's metadata.\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.v1) return;\n return this.metadata[this.v2 ? 2 : 3];\n }\n }, {\n key: \"_getFormats\",\n value: function _getFormats(metadata) {\n return metadata[this.v1 ? 2 : this.v2 ? 3 : 4];\n }\n\n // For countries of the same region (e.g. NANPA)\n // formats are all stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"formats\",\n value: function formats() {\n var _this = this;\n var formats = this._getFormats(this.metadata) || this._getFormats(this.getDefaultCountryMetadataForRegion()) || [];\n return formats.map(function (_) {\n return new Format(_, _this);\n });\n }\n }, {\n key: \"nationalPrefix\",\n value: function nationalPrefix() {\n return this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5];\n }\n }, {\n key: \"_getNationalPrefixFormattingRule\",\n value: function _getNationalPrefixFormattingRule(metadata) {\n return metadata[this.v1 ? 4 : this.v2 ? 5 : 6];\n }\n\n // For countries of the same region (e.g. NANPA)\n // national prefix formatting rule is stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"_nationalPrefixForParsing\",\n value: function _nationalPrefixForParsing() {\n return this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7];\n }\n }, {\n key: \"nationalPrefixForParsing\",\n value: function nationalPrefixForParsing() {\n // If `national_prefix_for_parsing` is not set explicitly,\n // then infer it from `national_prefix` (if any)\n return this._nationalPrefixForParsing() || this.nationalPrefix();\n }\n }, {\n key: \"nationalPrefixTransformRule\",\n value: function nationalPrefixTransformRule() {\n return this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8];\n }\n }, {\n key: \"_getNationalPrefixIsOptionalWhenFormatting\",\n value: function _getNationalPrefixIsOptionalWhenFormatting() {\n return !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9];\n }\n\n // For countries of the same region (e.g. NANPA)\n // \"national prefix is optional when formatting\" flag is\n // stored in the \"main\" country for that region.\n // E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) || this._getNationalPrefixIsOptionalWhenFormatting(this.getDefaultCountryMetadataForRegion());\n }\n }, {\n key: \"leadingDigits\",\n value: function leadingDigits() {\n return this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10];\n }\n }, {\n key: \"types\",\n value: function types() {\n return this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11];\n }\n }, {\n key: \"hasTypes\",\n value: function hasTypes() {\n // Versions 1.2.0 - 1.2.4: can be `[]`.\n /* istanbul ignore next */\n if (this.types() && this.types().length === 0) {\n return false;\n }\n // Versions <= 1.2.4: can be `undefined`.\n // Version >= 1.2.5: can be `0`.\n return !!this.types();\n }\n }, {\n key: \"type\",\n value: function type(_type2) {\n if (this.hasTypes() && getType(this.types(), _type2)) {\n return new Type(getType(this.types(), _type2), this);\n }\n }\n }, {\n key: \"ext\",\n value: function ext() {\n if (this.v1 || this.v2) return DEFAULT_EXT_PREFIX;\n return this.metadata[13] || DEFAULT_EXT_PREFIX;\n }\n }]);\n}();\nvar Format = /*#__PURE__*/function () {\n function Format(format, metadata) {\n _classCallCheck(this, Format);\n this._format = format;\n this.metadata = metadata;\n }\n return _createClass(Format, [{\n key: \"pattern\",\n value: function pattern() {\n return this._format[0];\n }\n }, {\n key: \"format\",\n value: function format() {\n return this._format[1];\n }\n }, {\n key: \"leadingDigitsPatterns\",\n value: function leadingDigitsPatterns() {\n return this._format[2] || [];\n }\n }, {\n key: \"nationalPrefixFormattingRule\",\n value: function nationalPrefixFormattingRule() {\n return this._format[3] || this.metadata.nationalPrefixFormattingRule();\n }\n }, {\n key: \"nationalPrefixIsOptionalWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsOptionalWhenFormattingInNationalFormat() {\n return !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n }, {\n key: \"nationalPrefixIsMandatoryWhenFormattingInNationalFormat\",\n value: function nationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\n // National prefix is omitted if there's no national prefix formatting rule\n // set for this country, or when the national prefix formatting rule\n // contains no national prefix itself, or when this rule is set but\n // national prefix is optional for this phone number format\n // (and it is not enforced explicitly)\n return this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat();\n }\n\n // Checks whether national prefix formatting rule contains national prefix.\n }, {\n key: \"usesNationalPrefix\",\n value: function usesNationalPrefix() {\n return this.nationalPrefixFormattingRule() &&\n // Check that national prefix formatting rule is not a \"dummy\" one.\n !FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\n // In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\n // when `national_prefix_formatting_rule` is not present.\n // So, `true` or `false` are returned explicitly here, so that\n // `0` number isn't returned.\n ? true : false;\n }\n }, {\n key: \"internationalFormat\",\n value: function internationalFormat() {\n return this._format[5] || this.format();\n }\n }]);\n}();\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\nvar FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/;\nvar Type = /*#__PURE__*/function () {\n function Type(type, metadata) {\n _classCallCheck(this, Type);\n this.type = type;\n this.metadata = metadata;\n }\n return _createClass(Type, [{\n key: \"pattern\",\n value: function pattern() {\n if (this.metadata.v1) return this.type;\n return this.type[0];\n }\n }, {\n key: \"possibleLengths\",\n value: function possibleLengths() {\n if (this.metadata.v1) return;\n return this.type[1] || this.metadata.possibleLengths();\n }\n }]);\n}();\nfunction getType(types, type) {\n switch (type) {\n case 'FIXED_LINE':\n return types[0];\n case 'MOBILE':\n return types[1];\n case 'TOLL_FREE':\n return types[2];\n case 'PREMIUM_RATE':\n return types[3];\n case 'PERSONAL_NUMBER':\n return types[4];\n case 'VOICEMAIL':\n return types[5];\n case 'UAN':\n return types[6];\n case 'PAGER':\n return types[7];\n case 'VOIP':\n return types[8];\n case 'SHARED_COST':\n return types[9];\n }\n}\nexport function validateMetadata(metadata) {\n if (!metadata) {\n throw new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.');\n }\n\n // `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\n // For that reason, it's not used in this detection algorithm.\n // Instead, it detects by `countries: {}` property existence.\n if (!isObject(metadata) || !isObject(metadata.countries)) {\n throw new Error(\"[libphonenumber-js] `metadata` argument was passed but it's not a valid metadata. Must be an object having `.countries` child object property. Got \".concat(isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata, \".\"));\n }\n}\n\n// Babel transforms `typeof` into some \"branches\"\n// so istanbul will show this as \"branch not covered\".\n/* istanbul ignore next */\nvar typeOf = function typeOf(_) {\n return _typeof(_);\n};\n\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\nexport function getExtPrefix(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).ext();\n }\n return DEFAULT_EXT_PREFIX;\n}\n\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\nexport function getCountryCallingCode(country, metadata) {\n metadata = new Metadata(metadata);\n if (metadata.hasCountry(country)) {\n return metadata.selectNumberingPlan(country).countryCallingCode();\n }\n throw new Error(\"Unknown country: \".concat(country));\n}\nexport function isSupportedCountry(country, metadata) {\n // metadata = new Metadata(metadata)\n // return metadata.hasCountry(country)\n return metadata.countries.hasOwnProperty(country);\n}\nfunction setVersion(metadata) {\n var version = metadata.version;\n if (typeof version === 'number') {\n this.v1 = version === 1;\n this.v2 = version === 2;\n this.v3 = version === 3;\n this.v4 = version === 4;\n } else {\n if (!version) {\n this.v1 = true;\n } else if (compare(version, V3) === -1) {\n this.v2 = true;\n } else if (compare(version, V4) === -1) {\n this.v3 = true;\n } else {\n this.v4 = true;\n }\n }\n}\n\n// const ISO_COUNTRY_CODE = /^[A-Z]{2}$/\n// function isCountryCode(countryCode) {\n// \treturn ISO_COUNTRY_CODE.test(countryCodeOrCountryCallingCode)\n// }\n//# sourceMappingURL=metadata.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nimport isObject from './helpers/isObject.js';\n\n// Extracts the following properties from function arguments:\n// * input `text`\n// * `options` object\n// * `metadata` JSON\nexport default function normalizeArguments(args) {\n var _Array$prototype$slic = Array.prototype.slice.call(args),\n _Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),\n arg_1 = _Array$prototype$slic2[0],\n arg_2 = _Array$prototype$slic2[1],\n arg_3 = _Array$prototype$slic2[2],\n arg_4 = _Array$prototype$slic2[3];\n var text;\n var options;\n var metadata;\n\n // If the phone number is passed as a string.\n // `parsePhoneNumber('88005553535', ...)`.\n if (typeof arg_1 === 'string') {\n text = arg_1;\n } else throw new TypeError('A text for parsing must be a string.');\n\n // If \"default country\" argument is being passed then move it to `options`.\n // `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\n if (!arg_2 || typeof arg_2 === 'string') {\n if (arg_4) {\n options = arg_3;\n metadata = arg_4;\n } else {\n options = undefined;\n metadata = arg_3;\n }\n if (arg_2) {\n options = _objectSpread({\n defaultCountry: arg_2\n }, options);\n }\n }\n // `defaultCountry` is not passed.\n // Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\n else if (isObject(arg_2)) {\n if (arg_3) {\n options = arg_2;\n metadata = arg_3;\n } else {\n metadata = arg_2;\n }\n } else throw new Error(\"Invalid second argument: \".concat(arg_2));\n return {\n text: text,\n options: options,\n metadata: metadata\n };\n}\n//# sourceMappingURL=normalizeArguments.js.map","// This is a port of Google Android `libphonenumber`'s\n// `phonenumberutil.js` of December 31th, 2018.\n//\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\n\nimport { VALID_DIGITS, PLUS_CHARS, MIN_LENGTH_FOR_NSN, MAX_LENGTH_FOR_NSN } from './constants.js';\nimport ParseError from './ParseError.js';\nimport Metadata from './metadata.js';\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js';\nimport extractExtension from './helpers/extension/extractExtension.js';\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js';\nimport getCountryCallingCode from './getCountryCallingCode.js';\nimport { isPossibleNumber } from './isPossible.js';\n// import { parseRFC3966 } from './helpers/RFC3966.js'\nimport PhoneNumber from './PhoneNumber.js';\nimport matchesEntirely from './helpers/matchesEntirely.js';\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractNationalNumber from './helpers/extractNationalNumber.js';\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js';\n\n// We don't allow input strings for parsing to be longer than 250 chars.\n// This prevents malicious input from consuming CPU.\nvar MAX_INPUT_STRING_LENGTH = 250;\n\n// This consists of the plus symbol, digits, and arabic-indic digits.\nvar PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']');\n\n// Regular expression of trailing characters that we want to remove.\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\nvar AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$');\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\n\n// Examples:\n//\n// ```js\n// parse('8 (800) 555-35-35', 'RU')\n// parse('8 (800) 555-35-35', 'RU', metadata)\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\n// parse('+7 800 555 35 35')\n// parse('+7 800 555 35 35', metadata)\n// ```\n//\n\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadata\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\nexport default function parse(text, options, metadata) {\n // If assigning the `{}` default value is moved to the arguments above,\n // code coverage would decrease for some weird reason.\n options = options || {};\n metadata = new Metadata(metadata);\n\n // Validate `defaultCountry`.\n if (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n throw new Error(\"Unknown country: \".concat(options.defaultCountry));\n }\n\n // Parse the phone number.\n var _parseInput = parseInput(text, options.v2, options.extract),\n formattedPhoneNumber = _parseInput.number,\n ext = _parseInput.ext,\n error = _parseInput.error;\n\n // If the phone number is not viable then return nothing.\n if (!formattedPhoneNumber) {\n if (options.v2) {\n if (error === 'TOO_SHORT') {\n throw new ParseError('TOO_SHORT');\n }\n throw new ParseError('NOT_A_NUMBER');\n }\n return {};\n }\n var _parsePhoneNumber = parsePhoneNumber(formattedPhoneNumber, options.defaultCountry, options.defaultCallingCode, metadata),\n country = _parsePhoneNumber.country,\n nationalNumber = _parsePhoneNumber.nationalNumber,\n countryCallingCode = _parsePhoneNumber.countryCallingCode,\n countryCallingCodeSource = _parsePhoneNumber.countryCallingCodeSource,\n carrierCode = _parsePhoneNumber.carrierCode;\n if (!metadata.hasSelectedNumberingPlan()) {\n if (options.v2) {\n throw new ParseError('INVALID_COUNTRY');\n }\n return {};\n }\n\n // Validate national (significant) number length.\n if (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\n // Won't throw here because the regexp already demands length > 1.\n /* istanbul ignore if */\n if (options.v2) {\n throw new ParseError('TOO_SHORT');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n\n // Validate national (significant) number length.\n //\n // A sidenote:\n //\n // They say that sometimes national (significant) numbers\n // can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\n // https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\n // Such numbers will just be discarded.\n //\n if (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\n if (options.v2) {\n throw new ParseError('TOO_LONG');\n }\n // Google's demo just throws an error in this case.\n return {};\n }\n if (options.v2) {\n var phoneNumber = new PhoneNumber(countryCallingCode, nationalNumber, metadata.metadata);\n if (country) {\n phoneNumber.country = country;\n }\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n if (ext) {\n phoneNumber.ext = ext;\n }\n phoneNumber.__countryCallingCodeSource = countryCallingCodeSource;\n return phoneNumber;\n }\n\n // Check if national phone number pattern matches the number.\n // National number pattern is different for each country,\n // even for those ones which are part of the \"NANPA\" group.\n var valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ? matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) : false;\n if (!options.extended) {\n return valid ? result(country, nationalNumber, ext) : {};\n }\n\n // isInternational: countryCallingCode !== undefined\n\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n carrierCode: carrierCode,\n valid: valid,\n possible: valid ? true : options.extended === true && metadata.possibleLengths() && isPossibleNumber(nationalNumber, country, metadata) ? true : false,\n phone: nationalNumber,\n ext: ext\n };\n}\n\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\nfunction _extractFormattedPhoneNumber(text, extract, throwOnError) {\n if (!text) {\n return;\n }\n if (text.length > MAX_INPUT_STRING_LENGTH) {\n if (throwOnError) {\n throw new ParseError('TOO_LONG');\n }\n return;\n }\n if (extract === false) {\n return text;\n }\n // Attempt to extract a possible number from the string passed in\n var startsAt = text.search(PHONE_NUMBER_START_PATTERN);\n if (startsAt < 0) {\n return;\n }\n return text\n // Trim everything to the left of the phone number\n .slice(startsAt)\n // Remove trailing non-numerical characters\n .replace(AFTER_PHONE_NUMBER_END_PATTERN, '');\n}\n\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\nfunction parseInput(text, v2, extract) {\n // // Parse RFC 3966 phone number URI.\n // if (text && text.indexOf('tel:') === 0) {\n // \treturn parseRFC3966(text)\n // }\n // let number = extractFormattedPhoneNumber(text, extract, v2)\n var number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\n extractFormattedPhoneNumber: function extractFormattedPhoneNumber(text) {\n return _extractFormattedPhoneNumber(text, extract, v2);\n }\n });\n // If the phone number is not viable, then abort.\n if (!number) {\n return {};\n }\n if (!isViablePhoneNumber(number)) {\n if (isViablePhoneNumberStart(number)) {\n return {\n error: 'TOO_SHORT'\n };\n }\n return {};\n }\n // Attempt to parse extension first, since it doesn't require region-specific\n // data and we want to have the non-normalised number here.\n var withExtensionStripped = extractExtension(number);\n if (withExtensionStripped.ext) {\n return withExtensionStripped;\n }\n return {\n number: number\n };\n}\n\n/**\r\n * Creates `parse()` result object.\r\n */\nfunction result(country, nationalNumber, ext) {\n var result = {\n country: country,\n phone: nationalNumber\n };\n if (ext) {\n result.ext = ext;\n }\n return result;\n}\n\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\nfunction parsePhoneNumber(formattedPhoneNumber, defaultCountry, defaultCallingCode, metadata) {\n // Extract calling code from phone number.\n var _extractCountryCallin = extractCountryCallingCode(parseIncompletePhoneNumber(formattedPhoneNumber), undefined, defaultCountry, defaultCallingCode, metadata.metadata),\n countryCallingCodeSource = _extractCountryCallin.countryCallingCodeSource,\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n\n // The exact country of the phone number\n var country;\n\n // If `formattedPhoneNumber` is passed in \"international\" format,\n // choose a country by `countryCallingCode`.\n if (countryCallingCode) {\n metadata.selectNumberingPlan(countryCallingCode);\n }\n // Else, if `formattedPhoneNumber` is passed in \"national\" format,\n // then `number` is defined and `countryCallingCode` is `undefined`.\n else if (number && (defaultCountry || defaultCallingCode)) {\n metadata.selectNumberingPlan(defaultCountry, defaultCallingCode);\n if (defaultCountry) {\n country = defaultCountry;\n } else {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n country = '001';\n }\n }\n }\n countryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata);\n } else return {};\n if (!number) {\n return {\n countryCallingCodeSource: countryCallingCodeSource,\n countryCallingCode: countryCallingCode\n };\n }\n var _extractNationalNumbe = extractNationalNumber(parseIncompletePhoneNumber(number), country, metadata),\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n\n // Sometimes there are several countries\n // corresponding to the same country phone code\n // (e.g. NANPA countries all having `1` country phone code).\n // Therefore, to reliably determine the exact country,\n // national (significant) number should have been parsed first.\n //\n // When `metadata.json` is generated, all \"ambiguous\" country phone codes\n // get their countries populated with the full set of\n // \"phone number type\" regular expressions.\n //\n var exactCountry = getCountryByCallingCode(countryCallingCode, {\n nationalNumber: nationalNumber,\n metadata: metadata\n });\n if (exactCountry) {\n country = exactCountry;\n /* istanbul ignore if */\n if (exactCountry === '001') {\n // Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\n // If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\n // then remove the \"istanbul ignore if\".\n } else {\n metadata.selectNumberingPlan(country);\n }\n }\n return {\n country: country,\n countryCallingCode: countryCallingCode,\n countryCallingCodeSource: countryCallingCodeSource,\n nationalNumber: nationalNumber,\n carrierCode: carrierCode\n };\n}\n//# sourceMappingURL=parse.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nimport { parseDigit } from './helpers/parseDigits.js';\n\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\nexport default function parseIncompletePhoneNumber(string) {\n var result = '';\n // Using `.split('')` here instead of normal `for ... of`\n // because the importing application doesn't neccessarily include an ES6 polyfill.\n // The `.split('')` approach discards \"exotic\" UTF-8 characters\n // (the ones consisting of four bytes) but digits\n // (including non-European ones) don't fall into that range\n // so such \"exotic\" characters would be discarded anyway.\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n result += parsePhoneNumberCharacter(character, result) || '';\n }\n return result;\n}\n\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\n // Only allow a leading `+`.\n if (character === '+') {\n // If this `+` is not the first parsed character\n // then discard it.\n if (prevParsedCharacters) {\n // `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\n // Any 3rd-party code that used to `import` and call this function before that\n // won't be passing any `eventListener` argument.\n //\n // The addition of the `eventListener` argument was to fix the slightly-weird behavior\n // of parsing an input string when the user inputs something like `\"2+7\"\n // https://github.com/catamphetamine/react-phone-number-input/issues/437\n //\n // If the parser encounters an unexpected `+` in a string being parsed\n // then it simply discards that out-of-place `+` and any following characters.\n //\n if (typeof eventListener === 'function') {\n eventListener('end');\n }\n return;\n }\n return '+';\n }\n // Allow digits.\n return parseDigit(character);\n}\n//# sourceMappingURL=parseIncompletePhoneNumber.js.map","import parsePhoneNumberWithError_ from './parsePhoneNumberWithError_.js';\nimport normalizeArguments from './normalizeArguments.js';\nexport default function parsePhoneNumberWithError() {\n var _normalizeArguments = normalizeArguments(arguments),\n text = _normalizeArguments.text,\n options = _normalizeArguments.options,\n metadata = _normalizeArguments.metadata;\n return parsePhoneNumberWithError_(text, options, metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport parse from './parse.js';\nexport default function parsePhoneNumberWithError(text, options, metadata) {\n return parse(text, _objectSpread(_objectSpread({}, options), {}, {\n v2: true\n }), metadata);\n}\n//# sourceMappingURL=parsePhoneNumberWithError_.js.map","// Copy-pasted from:\n// https://github.com/substack/semver-compare/blob/master/index.js\n//\n// Inlining this function because some users reported issues with\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\n//\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\nexport default function (a, b) {\n a = a.split('-');\n b = b.split('-');\n var pa = a[0].split('.');\n var pb = b[0].split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n if (a[1] && b[1]) {\n return a[1] > b[1] ? 1 : a[1] < b[1] ? -1 : 0;\n }\n return !a[1] && b[1] ? 1 : a[1] && !b[1] ? -1 : 0;\n}\n//# sourceMappingURL=semver-compare.js.map","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6],0,0,0,0,0,0,0,[0,[\"4\\\\d{4}\",[5]]]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"690\\\\d{6}|[356]\\\\d{5}\",[6,9]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5[024-68]\\\\d{7}\",[9]]]],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7\\\\d{8}\"]]],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\",[0,[\"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\"]]],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\",[0,[\"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\"]]],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[78][2-9]|9\\\\d)\\\\d{6}\",[9]]]],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\"]]],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"9[1-79]\\\\d{7}\"]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\",0,0,[0,[\"93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\"]]],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\",[0,[\"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\"]]],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}\",[7,8,9,10,11,12,13]]]],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]],0,0,0,0,0,0,[0,[\"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\"]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\"]]],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\"]]],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\",[0,[\"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\"]]],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\",[10]]]],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[5-9]\\\\d{7}\",[9]]]],\"BF\":[\"226\",\"00\",\"(?:[025-7]\\\\d|44)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]],0,0,0,0,0,0,[0,[\"(?:0[1-7]|44|5[0-8]|[67]\\\\d)\\\\d{6}\"]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\",[8,9]]]],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]],0,0,0,0,0,0,[0,[\"(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}\"]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]],0,0,0,0,0,0,[0,[\"(?:29|6[124-9]|7[125-9])\\\\d{6}\"]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]],0,0,0,0,0,0,[0,[\"01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}\",[10]]]],\"BL\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\",[0,[\"441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}\"]]],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\"]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"8001\\\\d{5}|(?:[2-467]\\\\d|50)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[235]|4[46]\"]],[\"(\\\\d{8})\",\"$1\",[\"[67]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\",0,0,0,[0,[\"[67]\\\\d{7}\",[8]]]],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\",[0,[\"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\"]]],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\",0,0,[0,[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\",[10,11]]]],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\",[0,[\"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}\"]]],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]],0,0,0,0,0,0,[0,[\"(?:1[67]|[78]7)\\\\d{6}\",[8]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:321|7[1-8]\\\\d)\\\\d{5}\",[8]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,[0,[\"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",[9]]],\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"6[0-35-7]\\\\d{5}\",[7]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[0,[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"88\\\\d{5}|(?:8[0-69]|9[017-9])\\\\d{7}\",[7,9]]]],\"CF\":[\"236\",\"00\",\"(?:[27]\\\\d{3}|8776)\\\\d{4}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[278]\"]]],0,0,0,0,0,0,[0,[\"7[02-7]\\\\d{6}\"]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]],0,0,0,0,0,0,[0,[\"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\"]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[89]|7[235-9])\\\\d{7}\",[9]]]],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]],0,0,0,0,0,0,[0,[\"0[157]\\\\d{8}\"]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]],0,0,0,0,0,0,[0,[\"[578]\\\\d{4}\"]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]],0,0,0,0,0,0,[0,[\"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:2\\\\d|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",[9]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]],0,0,0,0,0,0,[0,[\"(?:24[23]|6(?:[25-9]\\\\d|40))\\\\d{6}\",[9]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,[0,[\"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\",[11]]],\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\",0,0,0,[0,[\"333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}\",[10]]]],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\",0,0,0,[0,[\"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\",[8]]]],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5\\\\d|6[2-4])\\\\d{6}\",[8]]]],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:36|5[1-389]|9\\\\d)\\\\d{5}\"]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\",[0,[\"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\"]]],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[0,[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]],0,0,0,0,0,0,[0,[\"9(?:10|[4-79]\\\\d)\\\\d{5}\"]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7(?:060\\\\d|19(?:[0-5]\\\\d|6[0-6]))\\\\d{4}|(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\",[9]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:(?:5(?:[0-25-9]\\\\d\\\\d|3(?:10|33))|7[26-9]\\\\d\\\\d)\\\\d{6}|6[023]\\\\d{7,8})|17\\\\d{8}\",[10,11]]]],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]],0,0,0,0,0,0,[0,[\"77\\\\d{6}\"]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}\"]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\",[0,[\"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\"]]],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\",[0,[\"8[024]9[2-9]\\\\d{6}\"]]],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:4[0-29]|5\\\\d|6[0-3])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\",[9]]]],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\",[9]]]],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\",[7,8]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1[0-25]\\\\d{8}\",[10]]]],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,\"528[89]\",[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\"]]],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}\"]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-579]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|9\\\\d\\\\d)\\\\d{6}\"]]],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",[0,[\"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\",[6,7,8,9,10]]],\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,[0,[\"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\",[7]]],\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5],0,0,0,0,0,0,0,[0,[\"[56]\\\\d{4}\"]]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]],0,0,0,0,0,0,[0,[\"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\"]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\",0,0,0,[0,[\"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\"]]],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\"]]],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\",0,0,[0,[\"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\"]]],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[0,[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\",[0,[\"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}\"]]],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|444)|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}\"]]],\"GF\":[\"594\",\"00\",\"(?:[56]94\\\\d|7093)\\\\d{5}|(?:80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}\"]]],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[0,[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]]]],\"GH\":[\"233\",\"00\",\"(?:[235]\\\\d{3}|800)\\\\d{5}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[235]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\",[9]]]],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]],0,0,0,0,0,0,[0,[\"5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}\"]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]],0,0,0,0,0,0,[0,[\"[245]\\\\d{5}\"]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[67])\\\\d{5}\"]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]],0,0,0,0,0,0,[0,[\"6[0-356]\\\\d{7}\",[9]]]],\"GP\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55\\\\d)\\\\d{6}\"]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\",[10]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}\",[8]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\",[0,[\"671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\"]]],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]],0,0,0,0,0,0,[0,[\"9(?:5\\\\d|6[569]|77)\\\\d{6}\",[9]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-59]|70))\\\\d{4}\"]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,[0,[\"(?:4(?:44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",[8]]],\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]],0,0,0,0,0,0,[0,[\"[37-9]\\\\d{7}\",[8]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}\",[8,9]]]],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]],0,0,0,0,0,0,[0,[\"(?:[34]\\\\d|5[56])\\\\d{6}\"]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\",0,0,0,0,0,[0,[\"(?:[257]0|3[01])\\\\d{7}\",[9]]]],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8[1-35-9]\\\\d{7,10}\",[9,10,11,12]]]],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"8(?:22|[35-9]\\\\d)\\\\d{6}\",[9]]]],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\",0,0,0,0,0,[0,[\"55(?:4(?:0[0-2]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\",[9]]]],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\",[0,[\"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\"]]],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689])\\\\d|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[235689]\\\\d|4[0189])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",[10]]]],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]],0,0,0,0,0,0,[0,[\"38\\\\d{5}\"]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[3-9]\\\\d{8}\",[10]]]],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[0159]\\\\d|21|69|77|8[7-9])))\\\\d{5}\",[10]]]],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,[0,[\"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\"]],\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[0,[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[0,[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\",[0,[\"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\"]]],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}\",[9]]]],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\",0,0,[0,[\"(?:601[0-4]0|[7-9]0[1-9]\\\\d\\\\d)\\\\d{5}\",[10]]]],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:0[0-8]|1\\\\d|2[014]|[34]0)|7\\\\d\\\\d)\\\\d{6}\",[9]]]],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}\",[9]]]],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\",[8,9]]]],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\",0,0,0,0,0,[0,[\"(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}\",[8]]]],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]],0,0,0,0,0,0,[0,[\"[34]\\\\d{6}\"]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\",[0,[\"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\"]]],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"19[1-3]\\\\d{7}\",[10]]]],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\",0,0,0,[0,[\"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",[9,10]]]],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]],0,0,0,0,0,0,[0,[\"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}\",[8]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\",[0,[\"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\"]]],\"KZ\":[\"7\",\"810\",\"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"33622|7\",[0,[\"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\",[10]]],\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}\",[9,10]]]],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}\"]]],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\",[0,[\"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\"]]],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\",0,0,0,[0,[\"(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\"]]],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\"]]],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}\",[7,9]]]],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]],0,0,0,0,0,0,[0,[\"[56]\\\\d{7}\"]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\",0,0,0,[0,[\"6\\\\d{7}\"]]],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"2(?:[0367]|4[3-8])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\",0,0,0,[0,[\"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\",[9]]]],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]],0,0,0,0,0,0,[0,[\"2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}\"]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"9[1-6]\\\\d{7}\"]]],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[45]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"5(?:[19]|2[2-46-9]|3[3-9])|8(?:0[89]|92)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1-$2\",[\"[5-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"]]],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:[469]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}\"]]],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\"]]],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\",[8]]]],\"MF\":[\"590\",\"00\",\"(?:590\\\\d|7090)\\\\d{5}|(?:69|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5])|4(?:0[89]|1[2-6]|9\\\\d)|6(?:1[016-9]|5[0-4]|[67]\\\\d))|7090[0-4])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\",0,0,[0,[\"3[2-9]\\\\d{7}\"]]],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\",0,0,0,0,0,[0,[\"(?:(?:23|54)5|329|45[35-8])\\\\d{4}\"]]],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\"]]],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}\"]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\",[7,8,9,10]]]],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[12]1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"92[0139]\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}\",[8]]]],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]],0,0,0,0,0,0,[0,[\"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\",[8]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\",[0,[\"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\"]]],\"MQ\":[\"596\",\"00\",\"(?:596\\\\d|7091)\\\\d{5}|(?:69|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}\"]]],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]],0,0,0,0,0,0,[0,[\"[2-4][0-46-9]\\\\d{6}\"]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\",[0,[\"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\"]]],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]],0,0,0,0,0,0,[0,[\"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\"]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}\",[8]]],\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\",[7]]],\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\",[9]]]],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}\"]],\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-7]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\",[9,10]]]],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[2-79]\\\\d{7}\",[9]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:60|8[1245])\\\\d{7}\",[9]]]],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[579]\\\\d|8[0-79])\\\\d{4}\"]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]],0,0,0,0,0,0,[0,[\"(?:23|7[0467]|[89]\\\\d)\\\\d{6}\"]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\",0,0,[0,[\"(?:14|3[58])\\\\d{4}\"]]],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}\",[10]]]],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\"]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-58]|970\\\\d)\\\\d{7}\",[9,11]]]],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}\",[10]]]],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]],0,0,0,0,0,0,[0,[\"(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}\"]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:[56]|888[1-9])\\\\d{3}\"]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}\",[8,9,10]]],\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]],0,0,0,0,0,0,[0,[\"(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}\",[8]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\",[7,8]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9\\\\d{8}\",[9]]],\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"8[7-9]\\\\d{6}\",[8]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,[0,[\"(?:7\\\\d|8[1-48])\\\\d{6}\",[8]]],\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\",[10]]]],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}\",[10]]]],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]],0,0,0,0,0,0,[0,[\"2131[89]\\\\d{4}|21(?:1[013-5]|2\\\\d|3[2-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\",[9]]]],\"PM\":[\"508\",\"00\",\"[45]\\\\d{5}|(?:708|8\\\\d\\\\d)\\\\d{6}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[45]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:4[02-489]|5[02-9]|708(?:4[0-5]|5[0-6]))\\\\d{4}\"]]],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\",[0,[\"(?:787|939)[2-9]\\\\d{6}\"]]],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"5[69]\\\\d{7}\",[9]]]],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]],0,0,0,0,0,0,[0,[\"6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\"]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}\"]]],\"PY\":[\"595\",\"00\",\"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,[0,[\"9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}\",[9]]]],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]],0,0,0,0,0,0,[0,[\"[35-7]\\\\d{7}\",[8]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}\",[9]]],0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"6(?:[0-689]|7\\\\d)\\\\d{6,7}\",[8,9,10]]]],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,0,[0,[\"9\\\\d{9}\",[10]]],\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[237-9]\\\\d{7}\",[9]]]],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,0,0,0,0,[0,[\"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}\",[9]]]],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],0,0,0,0,0,0,[0,[\"48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\"]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,[0,[\"2[125-8]\\\\d{5}\"]],\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1[0-2]|9[0-3569])\\\\d{7}\"]]],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\",0,0,0,0,0,[0,[\"7[02369]\\\\d{7}\",[9]]]],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,[\"89(?:8[02-9]|9[0-4])\\\\d{4}|(?:8(?:0[1-9]|[1-8]\\\\d|9[0-7])|9[0-8]\\\\d)\\\\d{5}\",[8]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\",[0,[\"[56]\\\\d{4}\",[5]]]],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\",[8]]],\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\",[0,[\"(?:4[015-8]|9\\\\d)\\\\d{6}\",[8]]]],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1/$2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\",[9]]]],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,[0,[\"(?:25|3[0-5]|66|7[1-9]|8[08]|9[09])\\\\d{6}\"]]],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\",0,0,[0,[\"6[16]\\\\d{6}\",[8]]]],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]],0,0,0,0,0,0,[0,[\"7(?:[015-8]\\\\d|21|90)\\\\d{6}\"]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\",0,0,0,0,0,[0,[\"(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[679]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\",[7,8,9]]]],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-8]\\\\d|90)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]],0,0,0,0,0,0,[0,[\"(?:6[08]|7[124-7]|8[1-9])\\\\d{5}\",[7]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:12|9[1257-9])\\\\d{7}\"]]],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]],0,0,0,0,0,0,[0,[\"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\"]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,[0,[\"[5-7]\\\\d{7}\",[8]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\",[0,[\"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\"]]],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:50|9[1-9])\\\\d{7}\",[9]]]],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]],0,0,0,0,0,0,[0,[\"7[5-9]\\\\d{6}\",[8]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\",[0,[\"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\"]]],\"TD\":[\"235\",\"00|16\",\"(?:22|30|[689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,[0,[\"(?:30|[69]\\\\d|77|8[5-7])\\\\d{6}\"]],\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]],0,0,0,0,0,0,[0,[\"(?:7[0-29]|9[0-36-9])\\\\d{6}\"]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\",0,0,0,0,0,[0,[\"67(?:1[0-8]|2[4-7])\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",[9]]]],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,[\"(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[01578]|8[078])\\\\d{7}\"]],\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7],0,0,0,0,0,0,0,[0,[\"7[2-4]\\\\d{2,5}\"]]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"7[2-8]\\\\d{6}\",[8]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,[0,[\"(?:6\\\\d|71)\\\\d{6}\"]],\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]],0,0,0,0,0,0,[0,[\"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\"]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]],0,0,0,0,0,0,[0,[\"(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",[7]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5(?:[0-59]|61)\",\"5(?:[0-59]|61[06])\",\"5(?:[0-59]|61[06]1)\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"561(?:011|61\\\\d)\\\\d{4}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\",[10]]]],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\",[0,[\"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\"]]],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[01]\\\\d|90)\\\\d{4}\",[6,7]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[258]0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\",[9]]],0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:6[1-35-9]|7[13-9])\\\\d{7}\"]]],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}\",[9]]],\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"72[48]0\\\\d{5}|7(?:[014-8]\\\\d|2[0167]|3[06]|9[0-2589])\\\\d{6}\"]]],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[0,[\"3052(?:0[0-8]|[1-9]\\\\d)\\\\d{4}|(?:2742|305[3-9])\\\\d{6}|(?:472|983)[2-47-9]\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-47-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-247]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,[0,[\"9[1-9]\\\\d{6}\",[8]]],\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]],0,0,0,0,0,0,[0,[\"(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\"]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\",[0,[\"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\",[9,10]]]],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\",[0,[\"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\"]]],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4(?:1[24-8]|2[246])\\\\d{7}\"]]],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\",[0,[\"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\"]]],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\",[0,[\"340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\"]]],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\",0,0,0,0,0,[0,[\"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[1689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\",[9]]]],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]],0,0,0,0,0,0,[0,[\"(?:[58]\\\\d|7[013-7])\\\\d{5}\",[7]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]],0,0,0,0,0,0,[0,[\"(?:72|8[23])\\\\d{4}\",[6]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]],0,0,0,0,0,0,[0,[\"(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\",[7,10]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"4[3-9]\\\\d{6}\",[8]]]],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7[01378]\\\\d{7}\",[9]]]],\"YT\":[\"262\",\"00\",\"7093\\\\d{5}|(?:80|9\\\\d)\\\\d{7}|(?:26|63)9\\\\d{6}\",[9],0,\"0\",0,0,0,0,0,[0,[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\",[5,6,7,8,9]]]],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"(?:[59][5-8]|7[5-9])\\\\d{7}\"]]],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\",0,0,0,0,0,[0,[\"7(?:[1278]\\\\d|3[1-9])\\\\d{6}\",[9]]]]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|51\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { parsePhoneNumberWithError as _parsePhoneNumberWithError } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumberWithError() {\r\n\treturn withMetadataArgument(_parsePhoneNumberWithError, arguments)\r\n}\r\n","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}"],"names":[],"ignoreList":[],"sourceRoot":""} \ No newline at end of file