forked from samcamwilliams/HyperBEAM
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathindex.html
executable file
·1052 lines (927 loc) · 56.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link
rel="icon"
type="image/png"
href="https://arweave.net/oTMNDjwfn-Mv0bJZPGmMpDPPYWqINH6lQeTVc92bwjA"
/>
<link
href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap"
rel="stylesheet"
/>
<title>HyperBEAM</title>
<style>
:root {
--bg-color: #ffffff;
--border-color: #959595;
--section-bg-color-primary: #ececec;
--section-bg-color-alt1: #f0f0f0;
--text-color-primary: #000000;
--text-color-alt1: #3a3a3a;
--link-color: #1a73e8;
--link-hover-color: #0c47a1;
--active-action-bg: #f8f8f8;
--indicator-color: #27d735;
--indicator-color-active: #23be30;
}
* {
box-sizing: border-box;
}
body {
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue",
sans-serif;
font-family: "Open Sans", sans-serif;
display: flex;
flex-direction: column;
gap: 40px;
padding: 40px;
max-width: 1460px;
margin: 0 auto;
background: var(--bg-color);
color: var(--text-color-primary);
}
h1,
h2,
h3,
h4,
h5,
h6,
p,
ul,
li,
span {
margin: 0;
color: var(--text-color-primary);
}
button {
appearance: none;
outline: none;
border: none;
background: none;
padding: 0;
margin: 0;
transition: all 100ms;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue",
sans-serif;
font-family: "Open Sans", sans-serif;
}
h1 {
font-size: clamp(24px, 2.75vw, 32px);
font-weight: 600;
letter-spacing: 0.5px;
color: var(--text-color-primary);
}
ul {
list-style: none;
padding: 0;
}
a {
text-decoration: none;
color: var(--link-color);
font-size: 14px;
}
a:hover {
text-decoration: underline;
text-decoration-thickness: 1.5px;
color: var(--link-hover-color);
}
.header-hyperbeam-chain {
position: absolute;
right: 0;
margin-right: -200px;
z-index: 1;
animation: rotateInfinite 30s linear infinite;
/* Optionally set the origin if needed */
transform-origin: center;
}
@keyframes rotateInfinite {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
.header {
width: 100%;
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
overflow: hidden;
flex-wrap: wrap;
gap: 10px;
padding: 0px 40px 0px 0px;
border: 1px solid var(--border-color);
border-radius: 5px;
}
.header-logo {
height: 100%;
position: absolute;
left: -64.5px;
}
.header-main {
display: flex;
flex-direction: column;
gap: 7.5px;
overflow: hidden;
}
.header-left {
display: flex;
align-items: center;
gap: 7.5px;
z-index: 2;
}
@media (max-width: 765px) {
.header-left {
flex-direction: column;
align-items: start;
}
}
.header-left svg {
width: 100%;
height: auto;
display: block;
}
.header-main h4 {
font-size: clamp(16px, 1.75vw, 20px);
font-weight: 400;
color: var(--text-color-alt1);
}
.header-logo img {
height: 100%;
}
.subheader {
display: flex;
flex-direction: column;
gap: 15px;
align-items: flex-end;
justify-content: flex-end;
margin-right: 80px;
}
.subheader-value {
display: flex;
align-items: center;
gap: 7.5px;
}
.subheader-value p {
font-size: clamp(14px, 1.75vw, 16px);
font-weight: 400;
color: var(--text-color-alt1);
}
.subheader-indicator-wrapper {
display: flex;
align-items: center;
gap: 7.5px;
}
.subheader-indicator-wrapper p {
color: var(--text-color-primary);
font-weight: 600;
}
.subheader-indicator {
height: 13.5px;
width: 13.5px;
background: var(--indicator-color);
border-radius: 50%;
animation: pulse 1.075s infinite;
}
.subheader-value button {
letter-spacing: 0.5px;
padding: 0;
font-size: clamp(14px, 1.5vw, 15px);
font-weight: 600;
color: var(--text-color-primary);
text-decoration: underline;
text-decoration-thickness: 1.5px;
}
.subheader-value button:hover {
cursor: pointer;
color: var(--text-color-alt1);
}
.subheader-value button:disabled {
cursor: default;
color: var(--text-color-alt1);
}
.section-groups {
width: 100%;
display: flex;
flex-direction: column;
gap: 10px;
}
.section-group {
width: 100%;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.section {
height: fit-content;
flex: 1;
border: 1px solid var(--border-color);
border-radius: 5px;
background: #fcfcfc;
}
.section-header {
font-size: clamp(15px, 1.75vw, 18px);
font-weight: 500;
padding: 15px;
border-bottom: 1px solid var(--border-color);
color: var(--text-color-primary);
}
.key-metric-wrapper {
display: flex;
flex-direction: column;
gap: 7.5px;
padding: 5px 15px 15px 15px;
}
.key-metric-header {
border-bottom: none;
}
.key-metric-value {
font-size: clamp(24px, 2.75vw, 32px);
font-weight: 600;
color: var(--indicator-color);
}
.key-metric-label {
font-size: clamp(12px, 1.5vw, 13px);
font-weight: 400;
color: var(--text-color-alt1);
text-transform: uppercase;
}
.metrics-section-header {
border-bottom: none;
}
.section-lines-header {
height: 35px;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
border-bottom: 1px solid var(--border-color);
background: var(--section-bg-color-alt1);
}
.metrics-section-lines-header {
border-top: 1px solid var(--border-color);
}
.section-lines-header p {
font-size: clamp(13px, 1.75vw, 14px);
font-weight: 500;
color: var(--text-color-alt1);
max-width: 100%;
transparent-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.section-lines {
width: 100%;
display: flex;
flex-direction: column;
}
.section-line {
height: 35px;
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 15px;
border-bottom: 1px solid var(--border-color);
}
.info-line:nth-child(even) {
background: var(--section-bg-color-primary);
}
.info-line:nth-child(odd) {
background: var(--bg-color);
}
.section-line:last-child {
border-bottom: none;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
.section-line p {
font-size: clamp(13px, 1.75vw, 14px);
font-weight: 500;
max-width: 60%;
transparent-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#metrics-section {
width: 100%;
display: flex;
flex-direction: column;
gap: 20px;
}
.tabs-wrapper {
display: flex;
flex-direction: column;
gap: 25px;
}
.tabs {
display: flex;
gap: 30px;
}
.tab-button {
font-size: clamp(18px, 1.75vw, 20px);
font-weight: 600;
color: var(--text-color-alt1);
cursor: pointer;
position: relative;
}
.tab-button.active {
color: var(--text-color-primary);
}
.tab-button.active::after {
width: 100%;
content: "";
background: var(--indicator-color);
height: 3.5px;
border-radius: 5px;
display: block;
position: absolute;
bottom: -5.5px;
}
.tab-button:hover {
color: var(--text-color-primary);
}
.tab-content {
display: none;
}
.tab-content.active {
display: block;
}
@keyframes pulse {
0%,
100% {
background: var(--indicator-color);
transform: scale(1);
}
50% {
background: var(--indicator-color-active);
transform: scale(1.15);
}
}
@media (max-width: 1024px) {
.header {
position: relative;
flex-direction: column;
align-items: flex-start;
gap: 40px;
padding: 20px;
overflow: hidden;
}
.subheader {
align-items: flex-start;
z-index: 2;
}
.subheader-value {
flex-direction: column;
align-items: flex-start;
}
.section-group {
flex-direction: column;
}
.section-line {
height: fit-content;
flex-direction: column;
align-items: flex-start;
gap: 10px;
padding: 15px;
}
}
</style>
</head>
<body>
<div class="header">
<div class="header-hyperbeam-chain">
<svg
xmlns="http://www.w3.org/2000/svg"
width="300"
height="300"
viewBox="0 0 1518 1576"
fill="none"
>
<path
d="M893.47 806.1L161.593 403.648C145.446 394.77 141.567 373.28 153.59 359.316L193.046 313.488M893.47 806.1L193.046 313.488M893.47 806.1L416.635 53.7924M893.47 806.1L625.802 147.612C622.845 140.336 617.062 134.57 609.778 131.634L416.635 53.7924M893.47 806.1L307.463 180.594M893.47 806.1L252.086 244.914M893.47 806.1L362.84 116.274M193.046 313.488L252.086 244.914M416.635 53.7924L362.84 116.274M307.463 180.594L252.086 244.914M307.463 180.594L362.84 116.274"
stroke="black"
stroke-width="3"
/>
<path
d="M842.79 968.099L609.947 165.98C604.81 148.283 617.265 130.346 635.64 128.975L695.946 124.477M842.79 968.099L695.946 124.477M842.79 968.099L1037.68 98.9873M842.79 968.099L1119.22 313.241C1122.27 306.005 1122.26 297.839 1119.19 290.612L1037.68 98.9873M842.79 968.099L870.823 111.433M842.79 968.099L786.184 117.747M842.79 968.099L955.462 105.12M695.946 124.477L786.184 117.747M1037.68 98.9873L955.462 105.12M870.823 111.433L786.184 117.747M870.823 111.433L955.462 105.12"
stroke="black"
stroke-width="3"
/>
<path
d="M652.472 1009.76L1108.33 309.901C1118.39 294.461 1140.11 292.193 1153.14 305.223L1195.9 347.984M652.472 1009.76L1195.9 347.984M652.472 1009.76L1438.21 590.3M652.472 1009.76L1329.07 791.896C1336.55 789.488 1342.73 784.151 1346.2 777.106L1438.21 590.3M652.472 1009.76L1319.9 471.984M652.472 1009.76L1259.88 411.969M652.472 1009.76L1379.91 531.999M1195.9 347.984L1259.88 411.969M1438.21 590.3L1379.91 531.999M1319.9 471.984L1259.88 411.969M1319.9 471.984L1379.91 531.999"
stroke="black"
stroke-width="3"
/>
<path
d="M647.425 711.123L1481.45 755.979C1499.85 756.968 1512.67 774.644 1507.91 792.443L1492.25 850.855M647.425 711.123L1492.25 850.855M647.425 711.123L1403.56 1181.86M647.425 711.123L1174.4 1188.14C1180.22 1193.41 1187.94 1196.1 1195.77 1195.58L1403.56 1181.86M647.425 711.123L1446.87 1020.24M647.425 711.123L1468.83 938.26M647.425 711.123L1424.9 1102.22M1492.25 850.855L1468.83 938.26M1403.56 1181.86L1424.9 1102.22M1446.87 1020.24L1468.83 938.26M1446.87 1020.24L1424.9 1102.22"
stroke="black"
stroke-width="3"
/>
<path
d="M932.38 920.065L98.3547 875.209C79.9545 874.219 67.1311 856.544 71.9003 838.745L87.5519 780.332M932.38 920.065L87.5519 780.332M932.38 920.065L176.246 449.323M932.38 920.065L405.404 443.044C399.581 437.773 391.869 435.09 384.032 435.607L176.246 449.323M932.38 920.065L132.939 610.945M932.38 920.065L110.972 692.927M932.38 920.065L154.906 528.963M87.5519 780.332L110.972 692.927M176.246 449.323L154.906 528.963M132.939 610.945L110.972 692.927M132.939 610.945L154.906 528.963"
stroke="black"
stroke-width="3"
/>
<path
d="M903.025 745.784L281.561 1303.81C267.85 1316.12 246.285 1312.69 237.071 1296.73L206.835 1244.36M903.025 745.784L206.835 1244.36M903.025 745.784L35.4915 947.587M903.025 745.784L193.091 781.108C185.247 781.499 177.896 785.054 172.72 790.961L35.4915 947.587M903.025 745.784L119.153 1092.49M903.025 745.784L161.59 1166M903.025 745.784L76.7162 1018.99M206.835 1244.36L161.59 1166M35.4915 947.587L76.7162 1018.99M119.153 1092.49L161.59 1166M119.153 1092.49L76.7162 1018.99"
stroke="black"
stroke-width="3"
/>
<path
d="M837.439 606.13L1009.97 1423.35C1013.78 1441.38 1000.03 1458.34 981.599 1458.34H921.126M837.439 606.13L921.126 1458.34M837.439 606.13L578.439 1458.34M837.439 606.13L513.064 1238.61C509.48 1245.6 508.884 1253.74 511.412 1261.18L578.439 1458.34M837.439 606.13L745.763 1458.34M837.439 606.13L830.637 1458.34M837.439 606.13L660.888 1458.34M921.126 1458.34H830.637M578.439 1458.34H660.888M745.763 1458.34H830.637M745.763 1458.34H660.888"
stroke="black"
stroke-width="3"
/>
<path
d="M709.949 709.63L1409.81 1165.49C1425.25 1175.55 1427.52 1197.27 1414.49 1210.3L1371.73 1253.06M709.949 709.63L1371.73 1253.06M709.949 709.63L1129.41 1495.37M709.949 709.63L927.814 1386.23C930.221 1393.71 935.558 1399.89 942.604 1403.36L1129.41 1495.37M709.949 709.63L1247.73 1377.06M709.949 709.63L1307.74 1317.04M709.949 709.63L1187.71 1437.07M1371.73 1253.06L1307.74 1317.04M1129.41 1495.37L1187.71 1437.07M1247.73 1377.06L1307.74 1317.04M1247.73 1377.06L1187.71 1437.07"
stroke="black"
stroke-width="3"
/>
<path
d="M848.064 747.398L588.875 1541.39C583.157 1558.91 562.765 1566.72 546.806 1557.51L494.435 1527.27M848.064 747.398L494.435 1527.27M848.064 747.398L197.66 1355.93M848.064 747.398L250.906 1132.96C244.308 1137.22 239.72 1143.97 238.191 1151.67L197.66 1355.93M848.064 747.398L342.567 1439.59M848.064 747.398L416.07 1482.03M848.064 747.398L269.063 1397.16M494.435 1527.27L416.07 1482.03M197.66 1355.93L269.063 1397.16M342.567 1439.59L416.07 1482.03M342.567 1439.59L269.063 1397.16"
stroke="black"
stroke-width="3"
/>
</svg>
</div>
<div class="header-main">
<div class="header-left">
<svg
xmlns="http://www.w3.org/2000/svg"
width="519.75"
height="300.25"
viewBox="0 0 2079 1201"
fill="none"
>
<g clip-path="url(#clip0_4_60)">
<path
d="M-151.756 651.586L-795.187 297.77L-742.252 236.287M-151.756 651.586L-742.252 236.287M-151.756 651.586L-553.754 17.3496M-151.756 651.586L-381.316 86.8472L-553.754 17.3496M-151.756 651.586L-645.792 124.25M-151.756 651.586L-692.478 178.475M-151.756 651.586L-599.106 70.0252M-742.252 236.287L-692.478 178.475M-553.754 17.3496L-599.106 70.0252M-645.792 124.25L-692.478 178.475M-645.792 124.25L-599.106 70.0252"
stroke="black"
stroke-width="2"
/>
<path
d="M-196.133 740.998L-79.2581 94.9997L-2.84276 129.088M-196.133 740.998L-2.84276 129.088M-196.133 740.998L269.268 250.472M-196.133 740.998L336.032 285.544L269.268 250.472M-196.133 740.998L136.404 191.204M-196.133 740.998L69.0098 161.14M-196.133 740.998L203.799 221.268M-2.84276 129.088L69.0098 161.14M269.268 250.472L203.799 221.268M136.404 191.204L69.0098 161.14M136.404 191.204L203.799 221.268"
stroke="black"
stroke-width="2"
/>
<path
d="M-347.545 623.25L214.743 151L252.963 222.565M-347.545 623.25L252.963 222.565M-347.545 623.25L389.06 477.404M-347.545 623.25L419.463 535.596L389.06 477.404M-347.545 623.25L322.608 352.974M-347.545 623.25L288.9 289.857M-347.545 623.25L356.316 416.09M252.963 222.565L288.9 289.857M389.06 477.404L356.316 416.09M322.608 352.974L288.9 289.857M322.608 352.974L356.316 416.09"
stroke="black"
stroke-width="2"
/>
<path
d="M-363.89 589.076L397 556.5L350.535 698.71M-363.89 589.076L350.535 698.71M-363.89 589.076L266.799 1011.22M-363.89 589.076L225.5 1123.5L266.799 1011.22M-363.89 589.076L307.684 858.629M-363.89 589.076L328.424 781.23M-363.89 589.076L286.945 936.029M350.535 698.71L328.424 781.23M266.799 1011.22L286.945 936.029M307.684 858.629L328.424 781.23M307.684 858.629L286.945 936.029"
stroke="black"
stroke-width="2"
/>
<path
d="M-253.288 467.256L361.994 868.026L304.626 925.394M-253.288 467.256L304.626 925.394M-253.288 467.256L100.341 1129.68M-253.288 467.256L-66.4406 1047.53L100.341 1129.68M-253.288 467.256L200.087 1029.93M-253.288 467.256L250.683 979.337M-253.288 467.256L149.491 1080.53M304.626 925.394L250.683 979.337M100.341 1129.68L149.491 1080.53M200.087 1029.93L250.683 979.337M200.087 1029.93L149.491 1080.53"
stroke="black"
stroke-width="2"
/>
<path
d="M613.041 460.004L-382.554 673.068L612.745 518.873L613.041 460.004Z"
fill="#33F22F"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M612.467 574.227L-382.554 673.068L612.206 626.146L612.467 574.227Z"
fill="#86DAFE"
/>
<path
d="M612.745 518.873L-382.554 673.068L612.467 574.227L612.745 518.873Z"
fill="#FEE55F"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M611.945 678.066L-382.554 673.068L611.692 728.502L611.945 678.066Z"
fill="#F60000"
/>
<path
d="M612.206 626.146L-382.554 673.068L611.945 678.066L612.206 626.146Z"
fill="#9611FF"
/>
<path
d="M653.83 624V460.54H673.63V526.98C675.537 523.827 678.103 520.893 681.33 518.18C684.557 515.393 688.48 513.157 693.1 511.47C697.72 509.71 703.073 508.83 709.16 508.83C716.567 508.83 723.277 510.223 729.29 513.01C735.303 515.723 740.07 519.61 743.59 524.67C747.11 529.73 748.87 535.743 748.87 542.71V624H728.52V546.78C728.52 539.96 726.173 534.717 721.48 531.05C716.86 527.31 710.81 525.44 703.33 525.44C698.27 525.44 693.503 526.283 689.03 527.97C684.557 529.583 680.927 532.077 678.14 535.45C675.427 538.75 674.07 542.967 674.07 548.1V624H653.83ZM788.265 660.3C781.592 660.3 777.009 659.823 774.515 658.87C772.022 657.917 770.775 657.44 770.775 657.44V644.24L782.435 644.46C786.615 644.607 790.099 644.313 792.885 643.58C795.672 642.847 797.909 641.857 799.595 640.61C801.282 639.363 802.565 637.97 803.445 636.43C804.399 634.89 805.169 633.423 805.755 632.03L809.715 621.25L765.275 510.26H785.845L819.395 598.04L852.725 510.26H872.635L824.785 632.58C821.779 639.767 818.442 645.377 814.775 649.41C811.182 653.443 807.149 656.267 802.675 657.88C798.275 659.493 793.472 660.3 788.265 660.3ZM894.67 659.42V510.26H914.91L915.13 530.06C916.45 527.713 918.137 525.257 920.19 522.69C922.317 520.123 924.883 517.74 927.89 515.54C930.97 513.34 934.527 511.543 938.56 510.15C942.667 508.757 947.323 508.06 952.53 508.06C961.623 508.06 969.617 510.15 976.51 514.33C983.477 518.437 988.903 524.743 992.79 533.25C996.677 541.757 998.62 552.537 998.62 565.59C998.62 578.643 996.713 589.68 992.9 598.7C989.16 607.647 983.733 614.467 976.62 619.16C969.507 623.853 960.927 626.2 950.88 626.2C945.82 626.2 941.31 625.467 937.35 624C933.463 622.607 930.053 620.773 927.12 618.5C924.26 616.153 921.84 613.66 919.86 611.02C917.953 608.38 916.377 605.85 915.13 603.43V659.42H894.67ZM947.03 610.36C956.417 610.36 964.08 606.803 970.02 599.69C975.96 592.503 978.93 581.357 978.93 566.25C978.93 553.27 976.217 542.967 970.79 535.34C965.363 527.713 957.443 523.9 947.03 523.9C936.47 523.9 928.477 527.823 923.05 535.67C917.623 543.443 914.91 553.637 914.91 566.25C914.91 574.39 916.12 581.797 918.54 588.47C920.96 595.143 924.553 600.46 929.32 604.42C934.087 608.38 939.99 610.36 947.03 610.36ZM1073.79 626.2C1063.23 626.2 1053.92 623.89 1045.85 619.27C1037.79 614.65 1031.48 608.013 1026.93 599.36C1022.39 590.707 1020.11 580.33 1020.11 568.23C1020.11 556.277 1022.17 545.79 1026.27 536.77C1030.38 527.75 1036.32 520.71 1044.09 515.65C1051.94 510.59 1061.36 508.06 1072.36 508.06C1083.07 508.06 1092.13 510.37 1099.53 514.99C1106.94 519.61 1112.55 526.137 1116.36 534.57C1120.25 542.93 1122.19 552.867 1122.19 564.38V571.86H1040.68C1040.68 579.047 1041.86 585.573 1044.2 591.44C1046.62 597.233 1050.25 601.853 1055.09 605.3C1059.93 608.747 1066.06 610.47 1073.46 610.47C1080.72 610.47 1086.96 608.783 1092.16 605.41C1097.44 602.037 1100.82 597.16 1102.28 590.78H1121.42C1120.1 598.48 1117.02 604.97 1112.18 610.25C1107.42 615.53 1101.66 619.527 1094.91 622.24C1088.24 624.88 1081.2 626.2 1073.79 626.2ZM1040.79 558.11H1102.61C1102.61 551.583 1101.51 545.717 1099.31 540.51C1097.11 535.23 1093.74 531.087 1089.19 528.08C1084.72 525 1079.07 523.46 1072.25 523.46C1065.14 523.46 1059.24 525.183 1054.54 528.63C1049.85 532.003 1046.37 536.367 1044.09 541.72C1041.82 547 1040.72 552.463 1040.79 558.11ZM1150.33 624V510.26H1169.69V532.15C1171.6 526.723 1174.28 522.25 1177.72 518.73C1181.17 515.137 1185.09 512.46 1189.49 510.7C1193.97 508.94 1198.59 508.06 1203.35 508.06C1205.04 508.06 1206.69 508.17 1208.3 508.39C1209.92 508.61 1211.16 508.977 1212.04 509.49V529.18C1210.94 528.667 1209.51 528.337 1207.75 528.19C1206.07 527.97 1204.64 527.86 1203.46 527.86C1198.92 527.567 1194.66 527.86 1190.7 528.74C1186.74 529.547 1183.26 530.977 1180.25 533.03C1177.25 535.083 1174.86 537.797 1173.1 541.17C1171.42 544.47 1170.57 548.503 1170.57 553.27V624H1150.33ZM1240.45 624V464.94H1291.6C1310.96 464.94 1325.59 468.497 1335.49 475.61C1345.46 482.723 1350.45 492.99 1350.45 506.41C1350.45 514.843 1348.25 522.067 1343.85 528.08C1339.52 534.093 1331.9 539.043 1320.97 542.93C1327.2 544.25 1332.45 546.157 1336.7 548.65C1341.03 551.143 1344.47 554.077 1347.04 557.45C1349.68 560.75 1351.55 564.417 1352.65 568.45C1353.82 572.483 1354.41 576.737 1354.41 581.21C1354.41 595.583 1349.28 606.327 1339.01 613.44C1328.82 620.48 1313.56 624 1293.25 624H1240.45ZM1260.8 607.06H1293.03C1306.3 607.06 1316.39 604.897 1323.28 600.57C1330.25 596.17 1333.73 589.423 1333.73 580.33C1333.73 573.657 1332.01 568.267 1328.56 564.16C1325.19 559.98 1320.6 556.937 1314.81 555.03C1309.02 553.123 1302.56 552.17 1295.45 552.17H1260.8V607.06ZM1260.8 534.9H1295.45C1299.63 534.9 1303.77 534.497 1307.88 533.69C1311.99 532.883 1315.76 531.49 1319.21 529.51C1322.66 527.53 1325.44 524.89 1327.57 521.59C1329.7 518.217 1330.76 514 1330.76 508.94C1330.76 499.7 1327.2 492.88 1320.09 488.48C1313.05 484.007 1303.88 481.77 1292.59 481.77H1260.8V534.9ZM1389.55 624V464.94H1489.87L1489.76 482.87H1410.01V534.79H1481.84V552.61H1409.9V605.63L1491.96 605.85V624H1389.55ZM1512.81 624L1570.34 464.94H1593.33L1650.86 624H1630.07L1614.45 580.44H1549.22L1533.49 624H1512.81ZM1554.61 561.74H1608.84L1581.78 484.85L1554.61 561.74ZM1680.88 624V464.94H1709.04L1757 596.28L1805.62 464.94H1833.67V624H1812.66V495.41L1766.57 624H1747.54L1701.78 496.62V624H1680.88ZM1866.83 624V598.04H1891.03V624H1866.83Z"
fill="black"
/>
<path
d="M654.963 732V682.945H666.823C669.967 682.99 672.775 683.608 675.246 684.798C677.716 685.989 679.805 687.583 681.512 689.583C683.219 691.582 684.522 693.917 685.42 696.59C686.319 699.241 686.791 702.071 686.835 705.081V709.898C686.791 712.908 686.319 715.75 685.42 718.422C684.522 721.073 683.219 723.397 681.512 725.396C679.805 727.396 677.716 728.99 675.246 730.181C672.775 731.349 669.967 731.955 666.823 732H654.963ZM659.006 686.382V728.597H666.823C669.451 728.552 671.753 728.013 673.729 726.98C675.729 725.947 677.391 724.577 678.716 722.87C680.041 721.14 681.041 719.164 681.714 716.94C682.411 714.694 682.77 712.347 682.792 709.898V704.979C682.77 702.554 682.411 700.229 681.714 698.005C681.041 695.782 680.041 693.816 678.716 692.109C677.391 690.402 675.729 689.032 673.729 687.999C671.753 686.966 669.451 686.427 666.823 686.382H659.006ZM722.852 708.483H701.222V728.496H726.153V732H697.212V682.945H726.019V686.483H701.222V704.979H722.852V708.483ZM768.908 717.108C768.638 719.31 768.088 721.365 767.257 723.274C766.426 725.161 765.325 726.812 763.955 728.227C762.585 729.619 760.957 730.708 759.07 731.495C757.206 732.281 755.105 732.674 752.77 732.674C750.815 732.674 749.041 732.382 747.446 731.798C745.874 731.191 744.47 730.372 743.235 729.338C742.022 728.305 740.966 727.092 740.068 725.7C739.169 724.307 738.428 722.813 737.844 721.219C737.26 719.602 736.822 717.928 736.53 716.199C736.261 714.469 736.115 712.751 736.092 711.044V703.935C736.115 702.228 736.261 700.51 736.53 698.78C736.822 697.051 737.26 695.389 737.844 693.794C738.428 692.177 739.169 690.672 740.068 689.279C740.966 687.887 742.022 686.674 743.235 685.641C744.47 684.585 745.874 683.765 747.446 683.181C749.041 682.575 750.815 682.271 752.77 682.271C755.15 682.271 757.273 682.665 759.137 683.451C761.024 684.237 762.652 685.337 764.022 686.752C765.393 688.145 766.482 689.796 767.291 691.705C768.122 693.614 768.661 695.692 768.908 697.938H764.898C764.629 696.253 764.191 694.67 763.584 693.188C763 691.705 762.214 690.414 761.226 689.313C760.238 688.19 759.047 687.314 757.655 686.685C756.262 686.034 754.634 685.708 752.77 685.708C751.175 685.708 749.76 685.978 748.524 686.517C747.289 687.056 746.2 687.774 745.256 688.673C744.335 689.571 743.549 690.627 742.898 691.84C742.247 693.03 741.719 694.299 741.314 695.647C740.91 696.995 740.607 698.376 740.405 699.791C740.225 701.184 740.135 702.542 740.135 703.868V711.044C740.135 712.369 740.225 713.739 740.405 715.154C740.607 716.569 740.91 717.951 741.314 719.298C741.719 720.646 742.247 721.926 742.898 723.139C743.549 724.33 744.335 725.385 745.256 726.306C746.2 727.205 747.289 727.923 748.524 728.462C749.76 729.001 751.175 729.271 752.77 729.271C754.656 729.271 756.296 728.968 757.688 728.361C759.104 727.732 760.294 726.868 761.26 725.767C762.248 724.667 763.034 723.375 763.618 721.893C764.225 720.41 764.651 718.815 764.898 717.108H768.908ZM805.732 708.483H784.103V728.496H809.034V732H780.093V682.945H808.899V686.483H784.103V704.979H805.732V708.483ZM850.744 732H846.735L824.229 690.593L824.195 732H820.186V682.945H824.195L846.701 724.285L846.735 682.945H850.744V732ZM894.577 686.483H878.944V732H875.002L875.036 686.483H859.369V682.945H894.577V686.483ZM920.62 711.482H908.491V732H904.516V682.945H918.363C920.519 682.99 922.552 683.338 924.461 683.99C926.37 684.641 928.032 685.584 929.447 686.82C930.885 688.033 932.008 689.526 932.816 691.301C933.647 693.075 934.063 695.108 934.063 697.399C934.063 699.039 933.816 700.532 933.322 701.88C932.85 703.228 932.188 704.452 931.334 705.552C930.48 706.63 929.458 707.585 928.268 708.416C927.1 709.247 925.809 709.955 924.394 710.539L935.579 731.562V732H931.368L920.62 711.482ZM908.491 708.079H919.171C920.699 708.034 922.125 707.742 923.45 707.203C924.775 706.664 925.921 705.934 926.887 705.013C927.875 704.07 928.639 702.947 929.178 701.644C929.739 700.341 930.02 698.915 930.02 697.365C930.02 695.636 929.717 694.097 929.11 692.75C928.504 691.402 927.673 690.268 926.617 689.347C925.584 688.403 924.349 687.685 922.911 687.19C921.496 686.696 919.969 686.427 918.329 686.382H908.491V708.079ZM969.574 718.321H950.909L946.562 732H942.486L958.456 682.945H962.094L977.929 732H973.886L969.574 718.321ZM952.054 714.716H968.428L960.275 688.909L952.054 714.716ZM991.979 728.496H1016.94V732H987.936V682.945H991.979V728.496ZM1028.47 682.945H1056.87V686.584H1044.57V728.429H1056.87V732H1028.47V728.429H1040.39V686.584H1028.47V682.945ZM1072.37 728.496H1099.12V732H1067.78L1067.72 728.867L1093.49 686.483H1068.53V682.945H1098.17L1098.21 685.91L1072.37 728.496ZM1137.26 708.483H1115.63V728.496H1140.56V732H1111.62V682.945H1140.42V686.483H1115.63V704.979H1137.26V708.483ZM1152.25 732V682.945H1164.11C1167.25 682.99 1170.06 683.608 1172.53 684.798C1175 685.989 1177.09 687.583 1178.8 689.583C1180.5 691.582 1181.81 693.917 1182.71 696.59C1183.6 699.241 1184.08 702.071 1184.12 705.081V709.898C1184.08 712.908 1183.6 715.75 1182.71 718.422C1181.81 721.073 1180.5 723.397 1178.8 725.396C1177.09 727.396 1175 728.99 1172.53 730.181C1170.06 731.349 1167.25 731.955 1164.11 732H1152.25ZM1156.29 686.382V728.597H1164.11C1166.74 728.552 1169.04 728.013 1171.01 726.98C1173.01 725.947 1174.68 724.577 1176 722.87C1177.33 721.14 1178.33 719.164 1179 716.94C1179.7 714.694 1180.06 712.347 1180.08 709.898V704.979C1180.06 702.554 1179.7 700.229 1179 698.005C1178.33 695.782 1177.33 693.816 1176 692.109C1174.68 690.402 1173.01 689.032 1171.01 687.999C1169.04 686.966 1166.74 686.427 1164.11 686.382H1156.29ZM1266.33 710.741C1266.31 712.403 1266.16 714.11 1265.89 715.862C1265.62 717.591 1265.19 719.276 1264.61 720.916C1264.05 722.533 1263.33 724.06 1262.45 725.498C1261.58 726.913 1260.53 728.159 1259.32 729.237C1258.13 730.293 1256.75 731.135 1255.18 731.764C1253.6 732.371 1251.84 732.674 1249.89 732.674C1247.95 732.674 1246.2 732.371 1244.63 731.764C1243.06 731.135 1241.65 730.293 1240.42 729.237C1239.21 728.159 1238.15 726.901 1237.25 725.464C1236.38 724.026 1235.65 722.499 1235.06 720.882C1234.5 719.242 1234.07 717.558 1233.78 715.828C1233.51 714.099 1233.37 712.403 1233.34 710.741V704.272C1233.37 702.61 1233.51 700.914 1233.78 699.185C1234.07 697.433 1234.5 695.748 1235.06 694.131C1235.62 692.491 1236.34 690.953 1237.22 689.515C1238.12 688.078 1239.17 686.82 1240.39 685.742C1241.6 684.664 1242.98 683.821 1244.53 683.215C1246.1 682.586 1247.86 682.271 1249.82 682.271C1251.77 682.271 1253.54 682.586 1255.11 683.215C1256.68 683.821 1258.07 684.664 1259.29 685.742C1260.52 686.797 1261.58 688.044 1262.45 689.481C1263.33 690.919 1264.05 692.458 1264.61 694.097C1265.19 695.714 1265.62 697.399 1265.89 699.151C1266.16 700.88 1266.31 702.587 1266.33 704.272V710.741ZM1262.35 704.205C1262.33 702.902 1262.23 701.543 1262.05 700.128C1261.87 698.713 1261.58 697.332 1261.17 695.984C1260.77 694.636 1260.24 693.356 1259.59 692.143C1258.96 690.908 1258.19 689.83 1257.26 688.909C1256.34 687.988 1255.27 687.258 1254.03 686.719C1252.79 686.18 1251.39 685.91 1249.82 685.91C1248.25 685.91 1246.84 686.191 1245.61 686.752C1244.39 687.292 1243.33 688.021 1242.41 688.942C1241.49 689.863 1240.7 690.941 1240.05 692.177C1239.42 693.39 1238.9 694.67 1238.5 696.018C1238.09 697.365 1237.8 698.747 1237.62 700.162C1237.44 701.577 1237.34 702.924 1237.32 704.205V710.741C1237.34 712.043 1237.44 713.402 1237.62 714.817C1237.82 716.21 1238.13 717.591 1238.53 718.961C1238.94 720.309 1239.45 721.601 1240.08 722.836C1240.73 724.049 1241.52 725.116 1242.44 726.037C1243.36 726.958 1244.44 727.699 1245.67 728.26C1246.91 728.799 1248.31 729.069 1249.89 729.069C1251.48 729.069 1252.88 728.799 1254.1 728.26C1255.33 727.699 1256.41 726.958 1257.33 726.037C1258.25 725.116 1259.03 724.049 1259.66 722.836C1260.31 721.601 1260.82 720.309 1261.21 718.961C1261.61 717.591 1261.89 716.21 1262.05 714.817C1262.23 713.402 1262.33 712.043 1262.35 710.741V704.205ZM1281.93 711.785V732H1277.88V682.945H1293.31C1295.47 682.99 1297.48 683.35 1299.35 684.023C1301.23 684.697 1302.87 685.663 1304.26 686.921C1305.68 688.156 1306.79 689.661 1307.6 691.436C1308.41 693.21 1308.81 695.22 1308.81 697.466C1308.81 699.712 1308.41 701.723 1307.6 703.497C1306.79 705.249 1305.68 706.743 1304.26 707.978C1302.87 709.191 1301.23 710.123 1299.35 710.774C1297.46 711.426 1295.45 711.763 1293.31 711.785H1281.93ZM1281.93 708.382H1293.31C1294.93 708.36 1296.44 708.09 1297.83 707.574C1299.22 707.057 1300.43 706.338 1301.47 705.417C1302.5 704.497 1303.31 703.374 1303.89 702.048C1304.5 700.723 1304.8 699.218 1304.8 697.534C1304.8 695.849 1304.51 694.322 1303.93 692.952C1303.34 691.582 1302.53 690.425 1301.5 689.481C1300.47 688.516 1299.26 687.774 1297.86 687.258C1296.47 686.719 1294.95 686.427 1293.31 686.382H1281.93V708.382ZM1344.46 708.483H1322.83V728.496H1347.76V732H1318.82V682.945H1347.62V686.483H1322.83V704.979H1344.46V708.483ZM1376.46 711.482H1364.34V732H1360.36V682.945H1374.21C1376.36 682.99 1378.4 683.338 1380.31 683.99C1382.21 684.641 1383.88 685.584 1385.29 686.82C1386.73 688.033 1387.85 689.526 1388.66 691.301C1389.49 693.075 1389.91 695.108 1389.91 697.399C1389.91 699.039 1389.66 700.532 1389.17 701.88C1388.69 703.228 1388.03 704.452 1387.18 705.552C1386.33 706.63 1385.3 707.585 1384.11 708.416C1382.94 709.247 1381.65 709.955 1380.24 710.539L1391.42 731.562V732H1387.21L1376.46 711.482ZM1364.34 708.079H1375.02C1376.54 708.034 1377.97 707.742 1379.29 707.203C1380.62 706.664 1381.77 705.934 1382.73 705.013C1383.72 704.07 1384.48 702.947 1385.02 701.644C1385.58 700.341 1385.86 698.915 1385.86 697.365C1385.86 695.636 1385.56 694.097 1384.96 692.75C1384.35 691.402 1383.52 690.268 1382.46 689.347C1381.43 688.403 1380.19 687.685 1378.76 687.19C1377.34 686.696 1375.81 686.427 1374.17 686.382H1364.34V708.079ZM1425.42 718.321H1406.75L1402.41 732H1398.33L1414.3 682.945H1417.94L1433.77 732H1429.73L1425.42 718.321ZM1407.9 714.716H1424.27L1416.12 688.909L1407.9 714.716ZM1474.74 686.483H1459.11V732H1455.17L1455.2 686.483H1439.54V682.945H1474.74V686.483ZM1484.31 682.945H1512.71V686.584H1500.42V728.429H1512.71V732H1484.31V728.429H1496.24V686.584H1484.31V682.945ZM1555.23 732H1551.22L1528.72 690.593L1528.68 732H1524.67V682.945H1528.68L1551.19 724.285L1551.22 682.945H1555.23V732ZM1597.65 726.171C1596.68 727.317 1595.62 728.305 1594.45 729.136C1593.28 729.967 1592.03 730.652 1590.71 731.191C1589.41 731.708 1588.04 732.079 1586.6 732.303C1585.16 732.55 1583.7 732.674 1582.22 732.674C1580.26 732.651 1578.47 732.348 1576.83 731.764C1575.21 731.158 1573.75 730.338 1572.45 729.305C1571.15 728.249 1570.01 727.025 1569.04 725.632C1568.08 724.217 1567.27 722.701 1566.62 721.084C1565.99 719.467 1565.51 717.782 1565.17 716.03C1564.83 714.256 1564.65 712.493 1564.63 710.741V703.868C1564.65 702.161 1564.81 700.442 1565.1 698.713C1565.42 696.983 1565.88 695.321 1566.48 693.727C1567.11 692.109 1567.89 690.616 1568.81 689.246C1569.73 687.853 1570.82 686.64 1572.08 685.607C1573.33 684.574 1574.75 683.765 1576.32 683.181C1577.92 682.575 1579.69 682.271 1581.65 682.271C1583.82 682.271 1585.83 682.631 1587.68 683.35C1589.54 684.046 1591.17 685.034 1592.56 686.314C1593.95 687.572 1595.08 689.088 1595.93 690.863C1596.81 692.637 1597.36 694.603 1597.58 696.759H1593.61C1593.29 695.187 1592.81 693.727 1592.16 692.379C1591.53 691.031 1590.72 689.875 1589.73 688.909C1588.74 687.943 1587.58 687.19 1586.23 686.651C1584.9 686.09 1583.39 685.809 1581.68 685.809C1580.11 685.809 1578.69 686.079 1577.43 686.618C1576.18 687.134 1575.06 687.842 1574.1 688.74C1573.16 689.616 1572.34 690.649 1571.64 691.84C1570.97 693.008 1570.4 694.266 1569.95 695.613C1569.53 696.938 1569.21 698.309 1569.01 699.724C1568.81 701.116 1568.7 702.475 1568.67 703.8V710.741C1568.7 712.111 1568.82 713.515 1569.04 714.952C1569.29 716.39 1569.65 717.793 1570.12 719.164C1570.59 720.511 1571.19 721.792 1571.91 723.004C1572.63 724.217 1573.48 725.284 1574.47 726.205C1575.48 727.104 1576.63 727.822 1577.91 728.361C1579.19 728.878 1580.63 729.147 1582.25 729.17C1583.26 729.192 1584.31 729.147 1585.39 729.035C1586.46 728.9 1587.51 728.676 1588.52 728.361C1589.55 728.024 1590.51 727.575 1591.38 727.014C1592.28 726.452 1593.06 725.745 1593.71 724.891L1593.74 712.223H1582.12V708.719H1597.58L1597.65 726.171ZM1676.92 719.938C1676.92 718.793 1676.75 717.771 1676.39 716.873C1676.05 715.952 1675.57 715.132 1674.94 714.413C1674.33 713.694 1673.62 713.065 1672.81 712.526C1672.01 711.965 1671.14 711.471 1670.22 711.044C1669.3 710.617 1668.36 710.235 1667.39 709.898C1666.42 709.562 1665.49 709.247 1664.59 708.955C1663.45 708.596 1662.28 708.203 1661.09 707.776C1659.92 707.327 1658.78 706.821 1657.65 706.26C1656.55 705.676 1655.51 705.024 1654.52 704.306C1653.55 703.564 1652.7 702.733 1651.96 701.812C1651.24 700.892 1650.67 699.87 1650.24 698.747C1649.84 697.601 1649.63 696.332 1649.63 694.939C1649.63 692.896 1650.08 691.087 1650.98 689.515C1651.9 687.943 1653.09 686.618 1654.55 685.54C1656.01 684.461 1657.65 683.653 1659.47 683.114C1661.31 682.552 1663.17 682.271 1665.03 682.271C1667.12 682.271 1669.11 682.62 1671 683.316C1672.88 683.99 1674.53 684.944 1675.95 686.18C1677.39 687.415 1678.53 688.92 1679.38 690.694C1680.24 692.446 1680.7 694.4 1680.77 696.557H1676.69C1676.51 694.962 1676.12 693.513 1675.51 692.21C1674.9 690.885 1674.09 689.751 1673.08 688.808C1672.07 687.864 1670.88 687.134 1669.51 686.618C1668.17 686.079 1666.67 685.809 1665.03 685.809C1663.66 685.809 1662.3 686 1660.96 686.382C1659.63 686.741 1658.43 687.303 1657.35 688.066C1656.29 688.808 1655.43 689.751 1654.76 690.896C1654.1 692.02 1653.78 693.345 1653.78 694.872C1653.78 696.512 1654.16 697.904 1654.92 699.05C1655.71 700.195 1656.7 701.161 1657.89 701.947C1659.08 702.733 1660.38 703.396 1661.8 703.935C1663.23 704.452 1664.59 704.901 1665.87 705.283C1667.06 705.642 1668.27 706.058 1669.48 706.529C1670.69 706.979 1671.86 707.506 1672.98 708.113C1674.13 708.719 1675.2 709.404 1676.18 710.168C1677.17 710.909 1678.03 711.763 1678.74 712.729C1679.49 713.694 1680.06 714.772 1680.46 715.963C1680.89 717.131 1681.1 718.434 1681.1 719.871C1681.1 722.027 1680.63 723.903 1679.69 725.498C1678.77 727.092 1677.56 728.429 1676.08 729.507C1674.6 730.562 1672.92 731.36 1671.03 731.899C1669.14 732.416 1667.23 732.674 1665.3 732.674C1663.15 732.674 1661.06 732.359 1659.03 731.73C1657.01 731.102 1655.21 730.181 1653.61 728.968C1652.04 727.755 1650.76 726.261 1649.77 724.487C1648.78 722.69 1648.25 720.646 1648.19 718.355H1652.26C1652.46 720.107 1652.93 721.668 1653.64 723.038C1654.39 724.386 1655.33 725.52 1656.47 726.441C1657.62 727.339 1658.94 728.024 1660.45 728.496C1661.95 728.945 1663.57 729.17 1665.3 729.17C1666.74 729.17 1668.14 728.99 1669.51 728.631C1670.91 728.271 1672.15 727.721 1673.25 726.98C1674.35 726.216 1675.24 725.262 1675.91 724.116C1676.59 722.948 1676.92 721.556 1676.92 719.938ZM1705.23 709.696L1718.33 682.945H1722.91L1707.18 713.537L1707.11 732H1703.34L1703.27 713.537L1687.54 682.945H1692.22L1705.23 709.696ZM1759.81 719.938C1759.81 718.793 1759.63 717.771 1759.27 716.873C1758.93 715.952 1758.45 715.132 1757.82 714.413C1757.21 713.694 1756.5 713.065 1755.7 712.526C1754.89 711.965 1754.02 711.471 1753.1 711.044C1752.18 710.617 1751.24 710.235 1750.27 709.898C1749.31 709.562 1748.37 709.247 1747.47 708.955C1746.33 708.596 1745.16 708.203 1743.97 707.776C1742.8 707.327 1741.66 706.821 1740.53 706.26C1739.43 705.676 1738.39 705.024 1737.4 704.306C1736.44 703.564 1735.58 702.733 1734.84 701.812C1734.12 700.892 1733.55 699.87 1733.12 698.747C1732.72 697.601 1732.52 696.332 1732.52 694.939C1732.52 692.896 1732.96 691.087 1733.86 689.515C1734.78 687.943 1735.97 686.618 1737.43 685.54C1738.89 684.461 1740.53 683.653 1742.35 683.114C1744.2 682.552 1746.05 682.271 1747.91 682.271C1750 682.271 1751.99 682.62 1753.88 683.316C1755.76 683.99 1757.41 684.944 1758.83 686.18C1760.27 687.415 1761.41 688.92 1762.27 690.694C1763.12 692.446 1763.58 694.4 1763.65 696.557H1759.57C1759.39 694.962 1759 693.513 1758.39 692.21C1757.78 690.885 1756.98 689.751 1755.96 688.808C1754.95 687.864 1753.76 687.134 1752.39 686.618C1751.05 686.079 1749.55 685.809 1747.91 685.809C1746.54 685.809 1745.18 686 1743.84 686.382C1742.51 686.741 1741.31 687.303 1740.23 688.066C1739.18 688.808 1738.31 689.751 1737.64 690.896C1736.99 692.02 1736.66 693.345 1736.66 694.872C1736.66 696.512 1737.04 697.904 1737.81 699.05C1738.59 700.195 1739.58 701.161 1740.77 701.947C1741.96 702.733 1743.26 703.396 1744.68 703.935C1746.12 704.452 1747.47 704.901 1748.75 705.283C1749.95 705.642 1751.15 706.058 1752.36 706.529C1753.57 706.979 1754.74 707.506 1755.86 708.113C1757.01 708.719 1758.08 709.404 1759.06 710.168C1760.05 710.909 1760.91 711.763 1761.62 712.729C1762.37 713.694 1762.94 714.772 1763.34 715.963C1763.77 717.131 1763.98 718.434 1763.98 719.871C1763.98 722.027 1763.51 723.903 1762.57 725.498C1761.65 727.092 1760.45 728.429 1758.96 729.507C1757.48 730.562 1755.8 731.36 1753.91 731.899C1752.02 732.416 1750.11 732.674 1748.18 732.674C1746.03 732.674 1743.94 732.359 1741.92 731.73C1739.89 731.102 1738.09 730.181 1736.49 728.968C1734.92 727.755 1733.64 726.261 1732.65 724.487C1731.66 722.69 1731.13 720.646 1731.07 718.355H1735.14C1735.35 720.107 1735.81 721.668 1736.52 723.038C1737.27 724.386 1738.21 725.52 1739.35 726.441C1740.5 727.339 1741.83 728.024 1743.33 728.496C1744.84 728.945 1746.45 729.17 1748.18 729.17C1749.62 729.17 1751.02 728.99 1752.39 728.631C1753.79 728.271 1755.03 727.721 1756.13 726.98C1757.23 726.216 1758.12 725.262 1758.79 724.116C1759.47 722.948 1759.81 721.556 1759.81 719.938ZM1806.27 686.483H1790.63V732H1786.69L1786.73 686.483H1771.06V682.945H1806.27V686.483ZM1841.74 708.483H1820.11V728.496H1845.04V732H1816.1V682.945H1844.91V686.483H1820.11V704.979H1841.74V708.483ZM1861.59 682.945L1871.46 710.707L1881.97 682.945H1887.26V732H1883.32V710.269L1883.62 688.336L1872.74 717.243H1870.11L1860 688.808L1860.34 710.269V732H1856.4V682.945H1861.59Z"
fill="#848484"
/>
</g>
<defs>
<clipPath id="clip0_4_60">
<rect width="2079" height="1201" fill="transparent" />
</clipPath>
</defs>
</svg>
</div>
</div>
<div class="subheader">
<div class="subheader-value">
<p>Status:</p>
<div class="subheader-indicator-wrapper">
<div class="subheader-indicator"></div>
<p>Live</p>
</div>
</div>
<div class="subheader-value">
<p>Operator:</p>
<button
id="operator-action"
disabled="true"
onclick="copyToClipboard(this)"
>
Loading...
</button>
</div>
</div>
</div>
<div class="section-groups">
<div class="section-group">
<div class="section">
<h4 class="key-metric-header section-header">Uptime</h4>
<div class="key-metric-wrapper">
<h2 id="uptime-value" class="key-metric-value">-</h2>
<span class="key-metric-label">Seconds</span>
</div>
</div>
<div class="section">
<h4 class="key-metric-header section-header">Devices Loaded</h4>
<div class="key-metric-wrapper">
<h2 id="devices-value" class="key-metric-value">-</h2>
<span class="key-metric-label">Devices</span>
</div>
</div>
<div class="section">
<h4 class="key-metric-header section-header">System Load</h4>
<div class="key-metric-wrapper">
<h2 id="system-value" class="key-metric-value">-</h2>
<span class="key-metric-label">CPU Average</span>
</div>
</div>
</div>
<div class="section-group">
<div class="section">
<h4 class="key-metric-header section-header">
Read Requests Handled
</h4>
<div class="key-metric-wrapper">
<h2 id="read-value" class="key-metric-value">-</h2>
<span class="key-metric-label">Requests</span>
</div>
</div>
<div class="section">
<h4 class="key-metric-header section-header">
Write Requests Handled
</h4>
<div class="key-metric-wrapper">
<h2 id="write-value" class="key-metric-value">-</h2>
<span class="key-metric-label">Requests</span>
</div>
</div>
</div>
</div>
<div class="tabs-wrapper">
<div class="tabs">
<button class="tab-button active" onclick="showTab('devices-tab')">
Devices
</button>
<button class="tab-button" onclick="showTab('metrics-tab')">
Metrics
</button>
</div>
<div id="devices-tab" class="tab-content active">
<div id="info-section" class="section-group">
<div class="section">
<h4 class="section-header">Loaded Devices</h4>
<div id="info-section-lines-header" class="section-lines-header">
<p>Device Name</p>
<p>Module</p>
</div>
<div id="info-section-lines" class="section-lines">
<div class="info-line section-line">
<p>Loading...</p>
</div>
</div>
</div>
</div>
</div>
<div id="metrics-tab" class="tab-content">
<div id="metrics-section"></div>
</div>
</div>
<script>
const BASE_ROUTE = window.location.href;
function parseInfo(text) {
const lines = text
.split("\n")
.map((line) => line.trim())
.filter(Boolean);
let boundary = "";
for (const line of lines) {
if (line.startsWith("--")) {
boundary = line;
break;
}
}
if (!boundary) return [];
const parts = text.split(boundary);
const results = [];
parts.forEach((part) => {
part = part.trim();
if (!part || part === "--") return;
const sections = part.split("\r\n\r\n");
if (sections.length < 2) return;
const header = sections[0].trim();
const content = sections
.slice(1)
.join("\r\n\r\n")
.trim()
.replaceAll(`"`, "");
if (
content.toLowerCase().startsWith("atom") ||
!content.toLowerCase().startsWith("dev")
)
return;
const nameMatch = header.match(/name="([^"]+)"/);
if (!nameMatch) return;
const module = nameMatch[1];
results.push({
name: content.replaceAll(`"`, `''`),
content: module,
});
});
document.getElementById("devices-value").innerHTML = results.length;
return results;
}
function renderInfoGroups(groups) {
const container = document.getElementById("info-section-lines");
container.innerHTML = "";
groups.forEach((group) => {
const section = document.createElement("div");
section.classList.add("info-line");
section.classList.add("section-line");
const nameEl = document.createElement("p");
nameEl.textContent = group.content;
section.appendChild(nameEl);
const typeEl = document.createElement("p");
typeEl.textContent = group.name;
section.appendChild(typeEl);
container.appendChild(section);
});
}
function parseMetrics(text) {
const lines = text.split("\n");
const groups = {};
let currentMetric = null;
lines.forEach((line) => {
line = line.trim();
if (!line) return;
if (line.startsWith("# TYPE")) {
const parts = line.split(/\s+/);
const metricName = parts[2];
const metricType = parts[3];
if (!groups[metricType]) {
groups[metricType] = [];
}
currentMetric = {
name: metricName,
help: "",
values: [],
};
groups[metricType].push(currentMetric);
} else if (line.startsWith("# HELP")) {
const parts = line.split(/\s+/);
const metricName = parts[2];
const helpText = parts.slice(3).join(" ");
if (currentMetric && currentMetric.name === metricName) {
currentMetric.help = helpText;
}
} else if (line.startsWith("#")) {
} else {
if (currentMetric) {
const match = line.match(/(-?\d+(\.\d+)?)(\s*)$/);
if (match) {
let label = currentMetric.name;
const data = parseFloat(match[1]);
const inputMatch = line.match(/\{([^}]*)\}/);
if (inputMatch) {
label = inputMatch[1];
}
if (label === `process_uptime_seconds`) {
document.getElementById("uptime-value").innerHTML =
formatDisplayAmount(data);
startUpdatingUptime();
}
if (label === `system_load`)
document.getElementById("system-value").innerHTML = data;
currentMetric.values.push({ label, data });
}
}
}
});
if (groups.counter) {
const spawnedProcesse = groups.counter.find(
(item) => item.name === "cowboy_spawned_processes_total"
);
if (spawnedProcesse?.values) {
const readsHandled = spawnedProcesse.values.find(
(value) =>
value.label ===
`method="GET",reason="normal",status_class="success"`
)?.data || 0;
const writesHandled = spawnedProcesse.values.find(
(value) =>
value.label ===
`method="POST",reason="normal",status_class="success"`
)?.data || 0;
document.getElementById("read-value").innerHTML =
formatDisplayAmount(readsHandled);
document.getElementById("write-value").innerHTML =
formatDisplayAmount(writesHandled);
}
}
return groups;
}
function renderMetricGroups(groups) {
const container = document.getElementById("metrics-section");
container.innerHTML = "";
for (const group in groups) {
const section = document.createElement("div");
section.classList.add("section");
const header = document.createElement("h4");
header.textContent = group.charAt(0).toUpperCase() + group.slice(1);
header.classList.add("metrics-section-header");
header.classList.add("section-header");
section.appendChild(header);
groups[group].forEach((metric) => {
const metricContainer = document.createElement("div");
const subheader = document.createElement("div");
subheader.classList.add("metrics-section-lines-header");
subheader.classList.add("section-lines-header");
const subheaderValue = document.createElement("p");
subheaderValue.textContent = metric.name;
subheader.appendChild(subheaderValue);
metricContainer.appendChild(subheader);
const metricBody = document.createElement("div");
metricBody.classList.add("section-lines");
metricContainer.appendChild(metricBody);
if (metric.values.length > 0) {
metric.values.forEach((valueMap) => {
const metricLine = document.createElement("div");
metricLine.classList.add("section-line");
for (const key in valueMap) {
const metricValue = document.createElement("p");
switch (key) {
case "data":
metricValue.textContent = formatDisplayAmount(
valueMap[key]
);
break;
default:
metricValue.textContent = valueMap[key];
break;
}
metricLine.appendChild(metricValue);
}
metricContainer.appendChild(metricLine);
});
} else {
const metricLine = document.createElement("div");
metricLine.classList.add("section-line");
const metricValueLabel = document.createElement("p");
metricValueLabel.textContent = "No data";
metricLine.appendChild(metricValueLabel);
const metricValueData = document.createElement("p");
metricValueData.textContent = "-";
metricLine.appendChild(metricValueData);
metricContainer.appendChild(metricLine);
}
section.appendChild(metricContainer);
});
container.appendChild(section);
}
}
async function get(endpoint) {
return await (await fetch(`${BASE_ROUTE}${endpoint}`)).text();
}
function startUpdatingUptime() {
const uptimeElement = document.getElementById("uptime-value");
if (!uptimeElement) return;
const initialUptime =
parseFloat(uptimeElement.innerHTML.replaceAll(",", "")) || 0;
const startTime = Date.now();
function updateUptime() {
const elapsedSeconds = (Date.now() - startTime) / 1000;
const currentUptime = initialUptime + elapsedSeconds;
uptimeElement.innerHTML = formatDisplayAmount(
currentUptime.toFixed(2)
);
requestAnimationFrame(updateUptime);
}
updateUptime();
}
function showTab(tabId) {
document.querySelectorAll(".tab-content").forEach((content) => {
content.classList.remove("active");
});
document.querySelectorAll(".tab-button").forEach((button) => {
button.classList.remove("active");
});
document.getElementById(tabId).classList.add("active");
if (tabId === "devices-tab") {
document
.querySelector(".tab-button:nth-child(1)")
.classList.add("active");
} else if (tabId === "metrics-tab") {
document
.querySelector(".tab-button:nth-child(2)")
.classList.add("active");
}
}
function copyToClipboard(button) {
const text = button.innerHTML;
navigator.clipboard
.writeText(button.value)
.then(() => {
button.textContent = "Copied!";
button.disabled = true;
setTimeout(() => {
button.textContent = text;
button.disabled = false;
}, 2000);
})
.catch((err) => console.error("Error copying text: ", err));
}
function formatAddress(address, wrap) {
if (!address) return "";
const formattedAddress =
address.substring(0, 6) +
"..." +
address.substring(36, address.length);
return wrap ? `(${formattedAddress})` : formattedAddress;
}
function formatDisplayAmount(amount) {
if (amount === null) return "-";
if (amount.toString().includes(".")) {
let parts = amount.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
let firstTwoDecimals = parts[1].substring(0, 2);
if (firstTwoDecimals === "00") {