@authrim/setup 0.1.66 → 0.1.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +176 -16
- package/dist/web/ui.js.map +1 -1
- package/package.json +1 -1
package/dist/web/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAipJnF"}
|
package/dist/web/ui.js
CHANGED
|
@@ -42,6 +42,10 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
42
42
|
--border: #d6d3d1;
|
|
43
43
|
--border-light: #e7e5e4;
|
|
44
44
|
|
|
45
|
+
/* Glassmorphism */
|
|
46
|
+
--glass-bg: rgba(248, 245, 227, 0.25);
|
|
47
|
+
--glass-border: rgba(214, 211, 209, 0.5);
|
|
48
|
+
|
|
45
49
|
/* Splash */
|
|
46
50
|
--splash-bg: #1c1917;
|
|
47
51
|
--splash-text: #f8f5e3;
|
|
@@ -76,6 +80,8 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
76
80
|
--text-subtle: #78716c;
|
|
77
81
|
--border: #44403c;
|
|
78
82
|
--border-light: #292524;
|
|
83
|
+
--glass-bg: rgba(28, 25, 23, 0.35);
|
|
84
|
+
--glass-border: rgba(68, 64, 60, 0.5);
|
|
79
85
|
--splash-bg: #0c0a09;
|
|
80
86
|
--splash-text: #f8f5e3;
|
|
81
87
|
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
|
|
@@ -520,6 +526,94 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
520
526
|
height: 18px;
|
|
521
527
|
accent-color: var(--primary);
|
|
522
528
|
cursor: pointer;
|
|
529
|
+
/* Custom checkbox styling */
|
|
530
|
+
appearance: none;
|
|
531
|
+
-webkit-appearance: none;
|
|
532
|
+
background: var(--card-bg);
|
|
533
|
+
border: 2px solid var(--border);
|
|
534
|
+
border-radius: 4px;
|
|
535
|
+
transition: all var(--transition-fast);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
.checkbox-item input[type="checkbox"]:checked {
|
|
539
|
+
background: var(--primary);
|
|
540
|
+
border-color: var(--primary);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
.checkbox-item input[type="checkbox"]:checked::after {
|
|
544
|
+
content: '✓';
|
|
545
|
+
display: block;
|
|
546
|
+
color: white;
|
|
547
|
+
font-size: 12px;
|
|
548
|
+
font-weight: bold;
|
|
549
|
+
text-align: center;
|
|
550
|
+
line-height: 14px;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.checkbox-item input[type="checkbox"]:hover:not(:disabled) {
|
|
554
|
+
border-color: var(--primary);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.checkbox-item input[type="checkbox"]:disabled {
|
|
558
|
+
opacity: 0.5;
|
|
559
|
+
cursor: not-allowed;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
[data-theme="dark"] .checkbox-item input[type="checkbox"] {
|
|
563
|
+
background: var(--bg-secondary);
|
|
564
|
+
border-color: var(--border);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
[data-theme="dark"] .checkbox-item input[type="checkbox"]:checked {
|
|
568
|
+
background: var(--primary);
|
|
569
|
+
border-color: var(--primary);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/* ========================================
|
|
573
|
+
COMPONENT CARDS
|
|
574
|
+
======================================== */
|
|
575
|
+
.component-card {
|
|
576
|
+
background: var(--glass-bg);
|
|
577
|
+
backdrop-filter: blur(4px);
|
|
578
|
+
-webkit-backdrop-filter: blur(4px);
|
|
579
|
+
border: 1px solid var(--glass-border);
|
|
580
|
+
border-radius: 8px;
|
|
581
|
+
padding: 1rem;
|
|
582
|
+
margin-bottom: 0.75rem;
|
|
583
|
+
transition: background-color var(--transition-base), border-color var(--transition-base);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.component-card p {
|
|
587
|
+
color: var(--text-muted);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/* ========================================
|
|
591
|
+
HINT / TIP BOXES
|
|
592
|
+
======================================== */
|
|
593
|
+
.hint-box {
|
|
594
|
+
padding: 0.625rem 0.875rem;
|
|
595
|
+
border-radius: 8px;
|
|
596
|
+
font-size: 0.875rem;
|
|
597
|
+
line-height: 1.5;
|
|
598
|
+
background: #fef3c7;
|
|
599
|
+
color: #92400e;
|
|
600
|
+
border: 1px solid #fcd34d;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
[data-theme="dark"] .hint-box {
|
|
604
|
+
background: rgba(251, 191, 36, 0.12);
|
|
605
|
+
color: #fcd34d;
|
|
606
|
+
border-color: rgba(251, 191, 36, 0.25);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.section-hint.hint-box {
|
|
610
|
+
background: rgba(251, 191, 36, 0.15);
|
|
611
|
+
color: #92400e;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
[data-theme="dark"] .section-hint.hint-box {
|
|
615
|
+
background: rgba(251, 191, 36, 0.1);
|
|
616
|
+
color: #fcd34d;
|
|
523
617
|
}
|
|
524
618
|
|
|
525
619
|
/* ========================================
|
|
@@ -699,22 +793,47 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
699
793
|
}
|
|
700
794
|
|
|
701
795
|
.btn-secondary {
|
|
702
|
-
background: var(--bg
|
|
796
|
+
background: var(--card-bg);
|
|
703
797
|
color: var(--text);
|
|
704
798
|
border: 1px solid var(--border);
|
|
705
799
|
}
|
|
706
800
|
|
|
707
801
|
.btn-secondary:hover {
|
|
708
|
-
background: var(--
|
|
802
|
+
background: var(--bg-secondary);
|
|
803
|
+
border-color: var(--text-subtle);
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
[data-theme="dark"] .btn-secondary {
|
|
807
|
+
background: var(--bg-secondary);
|
|
709
808
|
border-color: var(--border);
|
|
710
809
|
}
|
|
711
810
|
|
|
811
|
+
[data-theme="dark"] .btn-secondary:hover {
|
|
812
|
+
background: var(--card-bg-hover);
|
|
813
|
+
border-color: var(--text-subtle);
|
|
814
|
+
}
|
|
815
|
+
|
|
712
816
|
.button-group {
|
|
713
817
|
display: flex;
|
|
818
|
+
justify-content: space-between;
|
|
819
|
+
align-items: center;
|
|
714
820
|
gap: 1rem;
|
|
715
821
|
margin-top: 2rem;
|
|
716
822
|
}
|
|
717
823
|
|
|
824
|
+
.button-group .btn-secondary:first-child:last-child {
|
|
825
|
+
/* Single back button - keep left aligned */
|
|
826
|
+
margin-right: auto;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
.button-group .btn-primary {
|
|
830
|
+
margin-left: auto;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
.button-group .btn-secondary + .btn-primary {
|
|
834
|
+
margin-left: 0;
|
|
835
|
+
}
|
|
836
|
+
|
|
718
837
|
/* ========================================
|
|
719
838
|
PROGRESS LOG
|
|
720
839
|
======================================== */
|
|
@@ -1443,7 +1562,46 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1443
1562
|
margin: 0;
|
|
1444
1563
|
width: 18px;
|
|
1445
1564
|
height: 18px;
|
|
1446
|
-
|
|
1565
|
+
/* Custom radio styling */
|
|
1566
|
+
appearance: none;
|
|
1567
|
+
-webkit-appearance: none;
|
|
1568
|
+
background: var(--card-bg);
|
|
1569
|
+
border: 2px solid var(--border);
|
|
1570
|
+
border-radius: 50%;
|
|
1571
|
+
cursor: pointer;
|
|
1572
|
+
transition: all var(--transition-fast);
|
|
1573
|
+
position: relative;
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1576
|
+
.radio-item input[type="radio"]:checked {
|
|
1577
|
+
border-color: var(--primary);
|
|
1578
|
+
background: var(--card-bg);
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
.radio-item input[type="radio"]:checked::after {
|
|
1582
|
+
content: '';
|
|
1583
|
+
position: absolute;
|
|
1584
|
+
top: 50%;
|
|
1585
|
+
left: 50%;
|
|
1586
|
+
transform: translate(-50%, -50%);
|
|
1587
|
+
width: 10px;
|
|
1588
|
+
height: 10px;
|
|
1589
|
+
background: var(--primary);
|
|
1590
|
+
border-radius: 50%;
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
.radio-item input[type="radio"]:hover:not(:disabled) {
|
|
1594
|
+
border-color: var(--primary);
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
[data-theme="dark"] .radio-item input[type="radio"] {
|
|
1598
|
+
background: var(--bg-secondary);
|
|
1599
|
+
border-color: var(--border);
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
[data-theme="dark"] .radio-item input[type="radio"]:checked {
|
|
1603
|
+
border-color: var(--primary);
|
|
1604
|
+
background: var(--bg-secondary);
|
|
1447
1605
|
}
|
|
1448
1606
|
|
|
1449
1607
|
.radio-separator {
|
|
@@ -1621,12 +1779,12 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1621
1779
|
<h3 style="margin: 0 0 1rem; font-size: 1rem;">📦 Components</h3>
|
|
1622
1780
|
|
|
1623
1781
|
<!-- API Component (required) -->
|
|
1624
|
-
<div class="component-card"
|
|
1782
|
+
<div class="component-card">
|
|
1625
1783
|
<label class="checkbox-item" style="font-weight: 600; margin-bottom: 0.25rem;">
|
|
1626
1784
|
<input type="checkbox" id="comp-api" checked disabled>
|
|
1627
1785
|
🔐 API (required)
|
|
1628
1786
|
</label>
|
|
1629
|
-
<p style="margin: 0.25rem 0 0.5rem 1.5rem; font-size: 0.85rem;
|
|
1787
|
+
<p style="margin: 0.25rem 0 0.5rem 1.5rem; font-size: 0.85rem;">
|
|
1630
1788
|
OIDC Provider endpoints: authorize, token, userinfo, discovery, management APIs.
|
|
1631
1789
|
</p>
|
|
1632
1790
|
<div style="margin-left: 1.5rem; display: flex; flex-wrap: wrap; gap: 0.75rem;">
|
|
@@ -1646,23 +1804,23 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1646
1804
|
</div>
|
|
1647
1805
|
|
|
1648
1806
|
<!-- Login UI Component -->
|
|
1649
|
-
<div class="component-card"
|
|
1807
|
+
<div class="component-card">
|
|
1650
1808
|
<label class="checkbox-item" style="font-weight: 600; margin-bottom: 0.25rem;">
|
|
1651
1809
|
<input type="checkbox" id="comp-login-ui" checked>
|
|
1652
1810
|
🖥️ Login UI
|
|
1653
1811
|
</label>
|
|
1654
|
-
<p style="margin: 0.25rem 0 0 1.5rem; font-size: 0.85rem;
|
|
1812
|
+
<p style="margin: 0.25rem 0 0 1.5rem; font-size: 0.85rem;">
|
|
1655
1813
|
User-facing login, registration, consent, and account management pages.
|
|
1656
1814
|
</p>
|
|
1657
1815
|
</div>
|
|
1658
1816
|
|
|
1659
1817
|
<!-- Admin UI Component -->
|
|
1660
|
-
<div class="component-card"
|
|
1818
|
+
<div class="component-card">
|
|
1661
1819
|
<label class="checkbox-item" style="font-weight: 600; margin-bottom: 0.25rem;">
|
|
1662
1820
|
<input type="checkbox" id="comp-admin-ui" checked>
|
|
1663
1821
|
⚙️ Admin UI
|
|
1664
1822
|
</label>
|
|
1665
|
-
<p style="margin: 0.25rem 0 0 1.5rem; font-size: 0.85rem;
|
|
1823
|
+
<p style="margin: 0.25rem 0 0 1.5rem; font-size: 0.85rem;">
|
|
1666
1824
|
Admin dashboard for managing tenants, clients, users, and system settings.
|
|
1667
1825
|
</p>
|
|
1668
1826
|
</div>
|
|
@@ -1741,7 +1899,7 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
1741
1899
|
</div>
|
|
1742
1900
|
</div>
|
|
1743
1901
|
|
|
1744
|
-
<div class="section-hint" style="margin-top: 0.75rem;
|
|
1902
|
+
<div class="section-hint hint-box" style="margin-top: 0.75rem;">
|
|
1745
1903
|
💡 CORS: Cross-origin requests from Login/Admin UI to API are automatically allowed.
|
|
1746
1904
|
</div>
|
|
1747
1905
|
</div>
|
|
@@ -2147,18 +2305,18 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
2147
2305
|
</h2>
|
|
2148
2306
|
|
|
2149
2307
|
<!-- Admin Setup Section -->
|
|
2150
|
-
<div id="admin-setup-section" class="hidden" style="margin-bottom: 1.5rem; padding: 1rem;
|
|
2308
|
+
<div id="admin-setup-section" class="hidden hint-box" style="margin-bottom: 1.5rem; padding: 1rem;">
|
|
2151
2309
|
<div style="display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem;">
|
|
2152
2310
|
<span style="font-size: 1.5rem;">⚠️</span>
|
|
2153
2311
|
<div>
|
|
2154
|
-
<div style="font-weight: 600;
|
|
2155
|
-
<div style="font-size: 0.875rem;
|
|
2312
|
+
<div style="font-weight: 600;">Admin Account Not Configured</div>
|
|
2313
|
+
<div style="font-size: 0.875rem; opacity: 0.85;">Initial administrator has not been set up for this environment.</div>
|
|
2156
2314
|
</div>
|
|
2157
2315
|
</div>
|
|
2158
2316
|
<button class="btn-primary" id="btn-start-admin-setup" style="margin-top: 0.5rem;">
|
|
2159
2317
|
🔐 Start Admin Account Setup with Passkey
|
|
2160
2318
|
</button>
|
|
2161
|
-
<div id="admin-setup-result" class="hidden" style="margin-top: 1rem; padding: 0.75rem; background:
|
|
2319
|
+
<div id="admin-setup-result" class="hidden" style="margin-top: 1rem; padding: 0.75rem; background: var(--card-bg); border-radius: 6px;">
|
|
2162
2320
|
<div style="font-weight: 500; margin-bottom: 0.5rem;">Setup URL Generated:</div>
|
|
2163
2321
|
<div style="display: flex; gap: 0.5rem; align-items: center;">
|
|
2164
2322
|
<input type="text" id="admin-setup-url" readonly style="flex: 1; padding: 0.5rem; border: 1px solid #d1d5db; border-radius: 4px; font-family: monospace; font-size: 0.875rem;">
|
|
@@ -3734,13 +3892,15 @@ export function getHtmlTemplate(sessionToken, manageOnly) {
|
|
|
3734
3892
|
|
|
3735
3893
|
// Add warning about one-time use and time limit
|
|
3736
3894
|
const setupNote = document.createElement('div');
|
|
3737
|
-
setupNote.
|
|
3895
|
+
setupNote.className = 'hint-box';
|
|
3896
|
+
setupNote.style.cssText = 'margin-top: 0.5rem; margin-bottom: 0.5rem;';
|
|
3738
3897
|
setupNote.innerHTML = '⚠️ This URL can only be used <strong>once</strong> and expires in <strong>1 hour</strong>.';
|
|
3739
3898
|
urlsEl.appendChild(setupNote);
|
|
3740
3899
|
} else {
|
|
3741
3900
|
// Show debug info when setup URL is missing
|
|
3742
3901
|
const debugDiv = document.createElement('div');
|
|
3743
|
-
debugDiv.
|
|
3902
|
+
debugDiv.className = 'hint-box';
|
|
3903
|
+
debugDiv.style.cssText = 'margin-top: 1rem;';
|
|
3744
3904
|
debugDiv.innerHTML = '<strong>⚠️ Admin Setup URL not generated</strong><br>';
|
|
3745
3905
|
if (result && result.adminSetupDebug) {
|
|
3746
3906
|
const debug = result.adminSetupDebug;
|
package/dist/web/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,eAAe,CAAC,YAAqB,EAAE,UAAoB;IACzE,gDAAgD;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,OAAO
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/web/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,eAAe,CAAC,YAAqB,EAAE,UAAoB;IACzE,gDAAgD;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA4/EoB,SAAS;0BACZ,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8oEhC,CAAC;AACT,CAAC"}
|