From f095a81b008d4968334db71e6366a20c7f791a3d Mon Sep 17 00:00:00 2001 From: Chad Little Date: Fri, 3 Mar 2017 15:31:12 -0800 Subject: [PATCH] Allow custom image generation when choosing a profile image Summary: Ref T10319. This swaps the default in the Picture Chooser to allow picking of the custom unique avatar. We're currently going with 100k unique possibilities. The logic roughly hashes a user name and picks an image pack, color, and border. Based on that, we select the first character of their username, or fall back to Psyduck if not [a-z][0-9]. Test Plan: Set the following usernames from ProfilePicture as a test: chad, epriestley, sally, 007, _cat_, -doggie-. {F3453979} Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T10319 Differential Revision: https://secure.phabricator.com/D17430 --- resources/builtin/alphanumeric/Cd.png | Bin 1451 -> 0 bytes resources/builtin/alphanumeric/Dd.png | Bin 1221 -> 0 bytes resources/builtin/alphanumeric/Gd.png | Bin 1491 -> 0 bytes resources/builtin/alphanumeric/I.png | Bin 211 -> 0 bytes resources/builtin/alphanumeric/Id.png | Bin 212 -> 0 bytes resources/builtin/alphanumeric/L.png | Bin 215 -> 0 bytes resources/builtin/alphanumeric/M.png | Bin 1599 -> 0 bytes resources/builtin/alphanumeric/Md.png | Bin 1599 -> 0 bytes resources/builtin/alphanumeric/R.png | Bin 1266 -> 0 bytes resources/builtin/alphanumeric/Rd.png | Bin 1266 -> 0 bytes resources/builtin/alphanumeric/Shrug.png | Bin 1167 -> 0 bytes resources/builtin/alphanumeric/Shrug2.png | Bin 1167 -> 0 bytes resources/builtin/alphanumeric/Ud.png | Bin 1109 -> 0 bytes resources/builtin/alphanumeric/V.png | Bin 1499 -> 0 bytes resources/builtin/alphanumeric/Vd.png | Bin 1499 -> 0 bytes .../builtin/alphanumeric/aleo-white/0.png | Bin 0 -> 1584 bytes .../builtin/alphanumeric/aleo-white/1.png | Bin 0 -> 835 bytes .../builtin/alphanumeric/aleo-white/2.png | Bin 0 -> 1229 bytes .../builtin/alphanumeric/aleo-white/3.png | Bin 0 -> 1573 bytes .../builtin/alphanumeric/aleo-white/4.png | Bin 0 -> 1016 bytes .../builtin/alphanumeric/aleo-white/5.png | Bin 0 -> 1300 bytes .../builtin/alphanumeric/aleo-white/6.png | Bin 0 -> 1541 bytes .../builtin/alphanumeric/aleo-white/7.png | Bin 0 -> 813 bytes .../builtin/alphanumeric/aleo-white/8.png | Bin 0 -> 1762 bytes .../builtin/alphanumeric/aleo-white/9.png | Bin 0 -> 1569 bytes .../builtin/alphanumeric/aleo-white/A.png | Bin 0 -> 1465 bytes .../builtin/alphanumeric/aleo-white/B.png | Bin 0 -> 1362 bytes .../builtin/alphanumeric/aleo-white/C.png | Bin 0 -> 1478 bytes .../builtin/alphanumeric/aleo-white/D.png | Bin 0 -> 1322 bytes .../builtin/alphanumeric/aleo-white/E.png | Bin 0 -> 703 bytes .../builtin/alphanumeric/aleo-white/F.png | Bin 0 -> 561 bytes .../builtin/alphanumeric/aleo-white/G.png | Bin 0 -> 1513 bytes .../builtin/alphanumeric/aleo-white/H.png | Bin 0 -> 815 bytes .../builtin/alphanumeric/aleo-white/I.png | Bin 0 -> 634 bytes .../builtin/alphanumeric/aleo-white/J.png | Bin 0 -> 857 bytes .../builtin/alphanumeric/aleo-white/K.png | Bin 0 -> 1353 bytes .../builtin/alphanumeric/aleo-white/L.png | Bin 0 -> 688 bytes .../builtin/alphanumeric/aleo-white/M.png | Bin 0 -> 1766 bytes .../builtin/alphanumeric/aleo-white/N.png | Bin 0 -> 1478 bytes .../builtin/alphanumeric/aleo-white/O.png | Bin 0 -> 1756 bytes .../builtin/alphanumeric/aleo-white/P.png | Bin 0 -> 1106 bytes .../builtin/alphanumeric/aleo-white/Q.png | Bin 0 -> 1862 bytes .../builtin/alphanumeric/aleo-white/R.png | Bin 0 -> 1390 bytes .../builtin/alphanumeric/aleo-white/S.png | Bin 0 -> 1487 bytes .../builtin/alphanumeric/aleo-white/T.png | Bin 0 -> 719 bytes .../builtin/alphanumeric/aleo-white/U.png | Bin 0 -> 1212 bytes .../builtin/alphanumeric/aleo-white/V.png | Bin 0 -> 1439 bytes .../builtin/alphanumeric/aleo-white/W.png | Bin 0 -> 2385 bytes .../builtin/alphanumeric/aleo-white/X.png | Bin 0 -> 1545 bytes .../builtin/alphanumeric/aleo-white/Y.png | Bin 0 -> 1248 bytes .../builtin/alphanumeric/aleo-white/Z.png | Bin 0 -> 995 bytes .../alphanumeric/aleo-white/_default.png | Bin 0 -> 3257 bytes .../alphanumeric/{0d.png => lato-dark/0.png} | Bin .../alphanumeric/{1d.png => lato-dark/1.png} | Bin .../alphanumeric/{2d.png => lato-dark/2.png} | Bin .../alphanumeric/{3d.png => lato-dark/3.png} | Bin .../alphanumeric/{4d.png => lato-dark/4.png} | Bin .../alphanumeric/{5d.png => lato-dark/5.png} | Bin .../alphanumeric/{6d.png => lato-dark/6.png} | Bin .../alphanumeric/{7d.png => lato-dark/7.png} | Bin .../alphanumeric/{8d.png => lato-dark/8.png} | Bin .../alphanumeric/{9d.png => lato-dark/9.png} | Bin .../alphanumeric/{Ad.png => lato-dark/A.png} | Bin 1538 -> 1537 bytes .../alphanumeric/{Bd.png => lato-dark/B.png} | Bin .../builtin/alphanumeric/lato-dark/C.png | Bin 0 -> 1443 bytes .../builtin/alphanumeric/lato-dark/D.png | Bin 0 -> 1219 bytes .../alphanumeric/{Ed.png => lato-dark/E.png} | Bin .../alphanumeric/{Fd.png => lato-dark/F.png} | Bin .../builtin/alphanumeric/lato-dark/G.png | Bin 0 -> 1480 bytes .../alphanumeric/{Hd.png => lato-dark/H.png} | Bin .../builtin/alphanumeric/lato-dark/I.png | Bin 0 -> 211 bytes .../alphanumeric/{Jd.png => lato-dark/J.png} | Bin .../alphanumeric/{Kd.png => lato-dark/K.png} | Bin .../alphanumeric/{Ld.png => lato-dark/L.png} | Bin .../builtin/alphanumeric/lato-dark/M.png | Bin 0 -> 1594 bytes .../alphanumeric/{ => lato-dark}/N.png | Bin 1144 -> 1144 bytes .../alphanumeric/{Od.png => lato-dark/O.png} | Bin .../alphanumeric/{Pd.png => lato-dark/P.png} | Bin .../alphanumeric/{Qd.png => lato-dark/Q.png} | Bin .../builtin/alphanumeric/lato-dark/R.png | Bin 0 -> 1259 bytes .../alphanumeric/{Sd.png => lato-dark/S.png} | Bin .../alphanumeric/{Td.png => lato-dark/T.png} | Bin .../builtin/alphanumeric/lato-dark/U.png | Bin 0 -> 1094 bytes .../builtin/alphanumeric/lato-dark/V.png | Bin 0 -> 1497 bytes .../alphanumeric/{Wd.png => lato-dark/W.png} | Bin .../alphanumeric/{Xd.png => lato-dark/X.png} | Bin .../alphanumeric/{Yd.png => lato-dark/Y.png} | Bin .../alphanumeric/{Zd.png => lato-dark/Z.png} | Bin .../alphanumeric/lato-dark/_default.png | Bin 0 -> 3471 bytes .../alphanumeric/{ => lato-white}/0.png | Bin 1517 -> 1517 bytes .../alphanumeric/{ => lato-white}/1.png | Bin 820 -> 820 bytes .../alphanumeric/{ => lato-white}/2.png | Bin 1183 -> 1183 bytes .../alphanumeric/{ => lato-white}/3.png | Bin 1556 -> 1556 bytes .../alphanumeric/{ => lato-white}/4.png | Bin 1017 -> 1017 bytes .../alphanumeric/{ => lato-white}/5.png | Bin 1301 -> 1301 bytes .../alphanumeric/{ => lato-white}/6.png | Bin 1503 -> 1503 bytes .../alphanumeric/{ => lato-white}/7.png | Bin 793 -> 793 bytes .../alphanumeric/{ => lato-white}/8.png | Bin 1685 -> 1685 bytes .../alphanumeric/{ => lato-white}/9.png | Bin 1490 -> 1490 bytes .../alphanumeric/{ => lato-white}/A.png | Bin 1538 -> 1538 bytes .../alphanumeric/{ => lato-white}/B.png | Bin 1279 -> 1279 bytes .../alphanumeric/{ => lato-white}/C.png | Bin 1451 -> 1451 bytes .../alphanumeric/{ => lato-white}/D.png | Bin 1221 -> 1221 bytes .../alphanumeric/{ => lato-white}/E.png | Bin 356 -> 356 bytes .../alphanumeric/{ => lato-white}/F.png | Bin 374 -> 374 bytes .../alphanumeric/{ => lato-white}/G.png | Bin 1491 -> 1491 bytes .../alphanumeric/{ => lato-white}/H.png | Bin 366 -> 366 bytes .../builtin/alphanumeric/lato-white/I.png | Bin 0 -> 211 bytes .../alphanumeric/{ => lato-white}/J.png | Bin 818 -> 818 bytes .../alphanumeric/{ => lato-white}/K.png | Bin 1270 -> 1270 bytes .../builtin/alphanumeric/lato-white/L.png | Bin 0 -> 216 bytes .../builtin/alphanumeric/lato-white/M.png | Bin 0 -> 1598 bytes .../alphanumeric/{Nd.png => lato-white/N.png} | Bin 1149 -> 1149 bytes .../alphanumeric/{ => lato-white}/O.png | Bin 1616 -> 1616 bytes .../alphanumeric/{ => lato-white}/P.png | Bin 1026 -> 1026 bytes .../alphanumeric/{ => lato-white}/Q.png | Bin 1750 -> 1750 bytes .../builtin/alphanumeric/lato-white/R.png | Bin 0 -> 1259 bytes .../alphanumeric/{ => lato-white}/S.png | Bin 1477 -> 1477 bytes .../alphanumeric/{ => lato-white}/T.png | Bin 356 -> 356 bytes .../alphanumeric/{ => lato-white}/U.png | Bin 1109 -> 1109 bytes .../builtin/alphanumeric/lato-white/V.png | Bin 0 -> 1490 bytes .../alphanumeric/{ => lato-white}/W.png | Bin 2446 -> 2446 bytes .../alphanumeric/{ => lato-white}/X.png | Bin 1638 -> 1638 bytes .../alphanumeric/{ => lato-white}/Y.png | Bin 1201 -> 1201 bytes .../alphanumeric/{ => lato-white}/Z.png | Bin 837 -> 837 bytes .../alphanumeric/lato-white/_default.png | Bin 0 -> 3621 bytes ...abricatorFilesComposeAvatarBuiltinFile.php | 182 +++++++++++++----- ...bricatorPeopleProfilePictureController.php | 41 +++- .../PhabricatorFilesComposeAvatarExample.php | 26 ++- src/infrastructure/util/PhabricatorHash.php | 15 ++ 130 files changed, 212 insertions(+), 52 deletions(-) delete mode 100644 resources/builtin/alphanumeric/Cd.png delete mode 100644 resources/builtin/alphanumeric/Dd.png delete mode 100644 resources/builtin/alphanumeric/Gd.png delete mode 100644 resources/builtin/alphanumeric/I.png delete mode 100644 resources/builtin/alphanumeric/Id.png delete mode 100644 resources/builtin/alphanumeric/L.png delete mode 100644 resources/builtin/alphanumeric/M.png delete mode 100644 resources/builtin/alphanumeric/Md.png delete mode 100644 resources/builtin/alphanumeric/R.png delete mode 100644 resources/builtin/alphanumeric/Rd.png delete mode 100644 resources/builtin/alphanumeric/Shrug.png delete mode 100644 resources/builtin/alphanumeric/Shrug2.png delete mode 100644 resources/builtin/alphanumeric/Ud.png delete mode 100644 resources/builtin/alphanumeric/V.png delete mode 100644 resources/builtin/alphanumeric/Vd.png create mode 100644 resources/builtin/alphanumeric/aleo-white/0.png create mode 100644 resources/builtin/alphanumeric/aleo-white/1.png create mode 100644 resources/builtin/alphanumeric/aleo-white/2.png create mode 100644 resources/builtin/alphanumeric/aleo-white/3.png create mode 100644 resources/builtin/alphanumeric/aleo-white/4.png create mode 100644 resources/builtin/alphanumeric/aleo-white/5.png create mode 100644 resources/builtin/alphanumeric/aleo-white/6.png create mode 100644 resources/builtin/alphanumeric/aleo-white/7.png create mode 100644 resources/builtin/alphanumeric/aleo-white/8.png create mode 100644 resources/builtin/alphanumeric/aleo-white/9.png create mode 100644 resources/builtin/alphanumeric/aleo-white/A.png create mode 100644 resources/builtin/alphanumeric/aleo-white/B.png create mode 100644 resources/builtin/alphanumeric/aleo-white/C.png create mode 100644 resources/builtin/alphanumeric/aleo-white/D.png create mode 100644 resources/builtin/alphanumeric/aleo-white/E.png create mode 100644 resources/builtin/alphanumeric/aleo-white/F.png create mode 100644 resources/builtin/alphanumeric/aleo-white/G.png create mode 100644 resources/builtin/alphanumeric/aleo-white/H.png create mode 100644 resources/builtin/alphanumeric/aleo-white/I.png create mode 100644 resources/builtin/alphanumeric/aleo-white/J.png create mode 100644 resources/builtin/alphanumeric/aleo-white/K.png create mode 100644 resources/builtin/alphanumeric/aleo-white/L.png create mode 100644 resources/builtin/alphanumeric/aleo-white/M.png create mode 100644 resources/builtin/alphanumeric/aleo-white/N.png create mode 100644 resources/builtin/alphanumeric/aleo-white/O.png create mode 100644 resources/builtin/alphanumeric/aleo-white/P.png create mode 100644 resources/builtin/alphanumeric/aleo-white/Q.png create mode 100644 resources/builtin/alphanumeric/aleo-white/R.png create mode 100644 resources/builtin/alphanumeric/aleo-white/S.png create mode 100644 resources/builtin/alphanumeric/aleo-white/T.png create mode 100644 resources/builtin/alphanumeric/aleo-white/U.png create mode 100644 resources/builtin/alphanumeric/aleo-white/V.png create mode 100644 resources/builtin/alphanumeric/aleo-white/W.png create mode 100644 resources/builtin/alphanumeric/aleo-white/X.png create mode 100644 resources/builtin/alphanumeric/aleo-white/Y.png create mode 100644 resources/builtin/alphanumeric/aleo-white/Z.png create mode 100644 resources/builtin/alphanumeric/aleo-white/_default.png rename resources/builtin/alphanumeric/{0d.png => lato-dark/0.png} (100%) rename resources/builtin/alphanumeric/{1d.png => lato-dark/1.png} (100%) rename resources/builtin/alphanumeric/{2d.png => lato-dark/2.png} (100%) rename resources/builtin/alphanumeric/{3d.png => lato-dark/3.png} (100%) rename resources/builtin/alphanumeric/{4d.png => lato-dark/4.png} (100%) rename resources/builtin/alphanumeric/{5d.png => lato-dark/5.png} (100%) rename resources/builtin/alphanumeric/{6d.png => lato-dark/6.png} (100%) rename resources/builtin/alphanumeric/{7d.png => lato-dark/7.png} (100%) rename resources/builtin/alphanumeric/{8d.png => lato-dark/8.png} (100%) rename resources/builtin/alphanumeric/{9d.png => lato-dark/9.png} (100%) rename resources/builtin/alphanumeric/{Ad.png => lato-dark/A.png} (82%) rename resources/builtin/alphanumeric/{Bd.png => lato-dark/B.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/C.png create mode 100644 resources/builtin/alphanumeric/lato-dark/D.png rename resources/builtin/alphanumeric/{Ed.png => lato-dark/E.png} (100%) rename resources/builtin/alphanumeric/{Fd.png => lato-dark/F.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/G.png rename resources/builtin/alphanumeric/{Hd.png => lato-dark/H.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/I.png rename resources/builtin/alphanumeric/{Jd.png => lato-dark/J.png} (100%) rename resources/builtin/alphanumeric/{Kd.png => lato-dark/K.png} (100%) rename resources/builtin/alphanumeric/{Ld.png => lato-dark/L.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/M.png rename resources/builtin/alphanumeric/{ => lato-dark}/N.png (71%) rename resources/builtin/alphanumeric/{Od.png => lato-dark/O.png} (100%) rename resources/builtin/alphanumeric/{Pd.png => lato-dark/P.png} (100%) rename resources/builtin/alphanumeric/{Qd.png => lato-dark/Q.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/R.png rename resources/builtin/alphanumeric/{Sd.png => lato-dark/S.png} (100%) rename resources/builtin/alphanumeric/{Td.png => lato-dark/T.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/U.png create mode 100644 resources/builtin/alphanumeric/lato-dark/V.png rename resources/builtin/alphanumeric/{Wd.png => lato-dark/W.png} (100%) rename resources/builtin/alphanumeric/{Xd.png => lato-dark/X.png} (100%) rename resources/builtin/alphanumeric/{Yd.png => lato-dark/Y.png} (100%) rename resources/builtin/alphanumeric/{Zd.png => lato-dark/Z.png} (100%) create mode 100644 resources/builtin/alphanumeric/lato-dark/_default.png rename resources/builtin/alphanumeric/{ => lato-white}/0.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/1.png (92%) rename resources/builtin/alphanumeric/{ => lato-white}/2.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/3.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/4.png (93%) rename resources/builtin/alphanumeric/{ => lato-white}/5.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/6.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/7.png (91%) rename resources/builtin/alphanumeric/{ => lato-white}/8.png (96%) rename resources/builtin/alphanumeric/{ => lato-white}/9.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/A.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/B.png (94%) rename resources/builtin/alphanumeric/{ => lato-white}/C.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/D.png (94%) rename resources/builtin/alphanumeric/{ => lato-white}/E.png (64%) rename resources/builtin/alphanumeric/{ => lato-white}/F.png (82%) rename resources/builtin/alphanumeric/{ => lato-white}/G.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/H.png (82%) create mode 100644 resources/builtin/alphanumeric/lato-white/I.png rename resources/builtin/alphanumeric/{ => lato-white}/J.png (57%) rename resources/builtin/alphanumeric/{ => lato-white}/K.png (94%) create mode 100644 resources/builtin/alphanumeric/lato-white/L.png create mode 100644 resources/builtin/alphanumeric/lato-white/M.png rename resources/builtin/alphanumeric/{Nd.png => lato-white/N.png} (72%) rename resources/builtin/alphanumeric/{ => lato-white}/O.png (96%) rename resources/builtin/alphanumeric/{ => lato-white}/P.png (93%) rename resources/builtin/alphanumeric/{ => lato-white}/Q.png (96%) create mode 100644 resources/builtin/alphanumeric/lato-white/R.png rename resources/builtin/alphanumeric/{ => lato-white}/S.png (95%) rename resources/builtin/alphanumeric/{ => lato-white}/T.png (82%) rename resources/builtin/alphanumeric/{ => lato-white}/U.png (94%) create mode 100644 resources/builtin/alphanumeric/lato-white/V.png rename resources/builtin/alphanumeric/{ => lato-white}/W.png (97%) rename resources/builtin/alphanumeric/{ => lato-white}/X.png (96%) rename resources/builtin/alphanumeric/{ => lato-white}/Y.png (94%) rename resources/builtin/alphanumeric/{ => lato-white}/Z.png (92%) create mode 100644 resources/builtin/alphanumeric/lato-white/_default.png diff --git a/resources/builtin/alphanumeric/Cd.png b/resources/builtin/alphanumeric/Cd.png deleted file mode 100644 index 66068c358a84e9065dc8ab10b80ad6cd7a58857a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPK41*4a0qc*4v!D`A6LuB>}K0GZ`J>NZvRAQVG&YoM^Rr;Fa5+);?4`_9?$wo$vkyMuJ4+Re$V*oZCY`i z<$6(_=PqZyV8NKhJ>Hj?i{?Mgk*K-)IB3RG8;#_vR}PSiur2c=B@8h1FlwZmj&deD2gKW-M zcOOyuacYIR*X9RH#lFVHemFGYOWsxvJL8wklZ5}oT}by~;(prf^eJfduQ>`oPEPph zxscONYLZ>Hi1&%bU8+wec1bwNS#gHxzCJ8wDgODc%>M~r7TjT3y`ufC_+GbqL}k`5XYUi2Abv*9Se65}}`TqiyyNAs!�&EiC=9lcTlme$(T(!nWW2pQKm$susvU-2NwdwtMa?!yl1$ zPTo1sW?r)7P4arka{K$8sa;8&%uCD+Tev2%9h8kS3cc{qQunK@_{)`?d4?YkZc?o~ zE~#G}r#>yL-cb+*P|3HiX=AujF*TDy^y>@9?^6_Khdm z1(EL`vbM2#%Cbc7TqW)ux8eAdFJ2otzGd3I4BaGrqf^Dd>G4E?cFnWtw!w2*@@FlY zr)puzcuMo|l0M&aO$*a&-QPCP;XW+!bw;XAllGRI?srvn?{Vsx`rP&lx_UI*SN3bNw zFPK4XW^HknuK}0vgaj+uFz2?6{YzRI7+4HET^vIy7~kG?6k4q%*6>hS%H^uc@AzEn z*C$`=6}>)X-TeOcp?DS(j)TQSTi>wqPweMSd$MAei#c;#de3K^YuKdl_uEoG!$}IV zlUxO#Y?Dv#Ze)4+!Ae=sG4FSwt5VaQXPaH+n(lo2F4oCWWNkHxW0FRv!X%EMZ?}~A zfl4HSqS4ztTqZ>KhOlUU7M%%{@mEng@%E~cu;Z!kT>sJqxDy=n-g~%CDB5zuWrET6 z2m2jG1YIWnQ|RJY+R~vQyXKA%ac6OUx3RltUWfM&t z>*Q7Li}?$y+esY zNi2>@U)fZ{Cs^p#7PEF97C0%oE}Fyj^*dB{3Qb$quU)#bsYI_fnn%gwzRsskN0!c4`|rd!n)QQ>cxVnZ z;;I#p_z{)zHi$U(-wYZB)l8Z&b|>ak~^!TG4ezCD5K(ToUo z&F9Zo6gtWrd%vseP0S0W4($R#PX7zNgR&r_I`-~QnzAu`53k+xSup}V6pUG#;9~6#E4hGah>f&2Eir!j|D>)p=S-_lg_M8c|(qe%8?`230vh1=v8{1+d1RXA5BAA2O;1iKo+xycYN~lH zmdWucN}1OYn6bo~_MFq5B#=_KeqxJ)cWiWu!ihhtUW@)Wa{QJWnPt0Nm)M;B!1F(2 Wmiq*g#1CbSAU&S0elF{r5}E*E@!FCA diff --git a/resources/builtin/alphanumeric/Gd.png b/resources/builtin/alphanumeric/Gd.png deleted file mode 100644 index 447c3a96b1e687658f6aee56d53119f3493bdeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1491 zcmbtUeKeB`9G<+p&Co_jSL#LNGMbM|)1@|Bj1fbbX}-$02vj+T2XV6-_R>>%aSN=RW8B&U4Olp65J&{hk6ZPZxFMk4P8{rcQPx zQeiM9_P0YQD-?dn(58ZHyePgT1%EHDz>kb5G8)NLPal}R$#$$q61yTAnHhX6-`T-* z-%m0a4DLiG;(b$z~Pv zPpDN}(n__@M~6|?cv^3@gzq|&b3@dgap`w8Pe0sp$kO|4lTQLPFYWMkG}Dv@WL2*; z+IC}lp`a#)QL8P^yp6|*icZ`W_*8WDjTGHQThMTsRK@uY9F6Nl;YzXynyLixKV#nQ zh>N9d5>513_nmDfq|y|m#ug^*7rVMtCIkS zbW5CKw9j3ids{fuOj2jk7Rlb*XECeEYgj|1Q(PNM7oIJ<4XbxqGGs;%nL!O4=2y4$ zQOv%lM&($+YmWVP0@F{f2Y3`;=FCd9`QqjW5H}cCTs%?J@SXE=PK!oOwq)F7$C90PGSr>d-4GU@bLq`au!pOLrW-2XEsLE$j%M||!Z>%V$c)X3rw+|r zvsZP9THhAx9x~K(i!;?Z+?5c+_2R{zhADuM!xLC>OON+*6^6`N2+h^5h< z#i?-TdMG`Eofn2pMCBD84Y~TOf40ss&8g<&4+@p#h*z36D)dTKD=$LV<#G zq>m0BK|n+3JP_z$fuGga7;A^|tGR_BU@#nPj*xdMvH(p*{J3EOPRIAgI!+>mpX8JN zXv^@O>cT+|sJ}O}O`#3)(T%lFPWhpL$>{e>1cK4oEZUS7nfqWGgx z=6F_S?Z`zUIwlC4l#N|b6B=5}52|ULl-WjTNJgb89ol)Nu7=Ex{c<}x{t~aD1$;nr zm_Q1v{9@rDkErqHh@@i*53fF*j$d6Ei^L$lUjK*?yFamL>IT`5FKMJdtO4~|0$L(47cBk&Re+R$+6OftKS|(>1o}=qacnXgo-&y-PREUqGIPPS z=b587_QuWX-?7hcJV@Gif7SSJ@n0F9XPcWj1Bt)&pU-$3v*{zc8BGyXco9(r^B`Sq zzA*z)xVtPgfyPLPxgjV;6xOgqRUYEL)SR`aP^sdzyn79p+JvM>9$ar_1{+Wi) zT3geU!^RjgQ@y$sGPUykVa>!#VnZD33~9j{hl45Jo)OSrcV`b2Yf}Uz4b5MsScr@x zsViLHBhi78{@0U#8S2^wiPT#j2*v}MXUxY5Tmh*_Bm+*QjuV(xvbI@WPP+iV8+t#u f_&=6yHF)!f9baCF3V)D2`?hyvk|(j15Dfhb)q!9g diff --git a/resources/builtin/alphanumeric/I.png b/resources/builtin/alphanumeric/I.png deleted file mode 100644 index b1ffcaad87b42047ef8836e058db3200c27afbed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLOw2%$zZdVt11Zh`pAc6d{T~d9E0!h$IZP!% ze!&b54E{YUfV^@~7srqa#_CLwFAR$jzKbLh*2~7a1BsxI= diff --git a/resources/builtin/alphanumeric/Id.png b/resources/builtin/alphanumeric/Id.png deleted file mode 100644 index a8564c83413211365c63142ab6aba7a965a9a015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLOw2%$zZdVt11Zh`pAc6d4FS!`FAo4&%q2m7 z!3=6MH&o|H0lDR#E{-7;jBn2>GBOx&Fl<=;oxf2@wT(rBCA!fz45AZ6e%RdVqBPM% mMW~ZxD#Z<=@d*>$xCW->dC6DX|0L&vggjmST-G@yGywpm|22^S diff --git a/resources/builtin/alphanumeric/L.png b/resources/builtin/alphanumeric/L.png deleted file mode 100644 index 44685fc20cc191fc43e942e79262989e9f99ec98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLOw2%$zZdVt11Zh`pAc6d{T~d9E0!h$IZP!% ze!&b54E{YUfV^r?7srqa#CUC6s}3d5N03)gRI*6eW!B1U1$RddAj-5c)yEqKMqb*x1BYL756DpeRUN)K;l} zRY3{DkdXX%|q#;-j{C8wNbX3&}W;q*mS7V+SzWI zb;=X4{Kpkx8p{be_~X?6trF9i7qO}NWzdsziGLwt^)6eX-|K25Apg21(Q&f9ZDz)> z*m(WwPnSX}5nD$=u{lNlZl^Jrj;0v`dlnkkpD)?@jr`H3?xK36P3o>h?ghOFJBPH* z>>cD8-SxZ180)Z7W))GziJR`IMhx2IcsOsZ;t6Y+yls+@3MAfpx#MK&7XubQBmbq4*t9e|*|lNwg(H9fz^-TsjD|`( zannPKpZG8{h~g4ZcYC3@zqF623f5$XMq{&GJ;jULX%VPv@#QQR7bmMNtopI5S1T(W z+InlGX=mP+?IVjO_&X4I5Ze4M60SOw5~+Be$*nTImS7ZqtXMO9679R8Z=85_V2;ip(DK*5 zT|v!@Vh^xdOVl+qmm<%HbutTM8LT>UNrLZgc5s2OwVBHWyv{L32KK0Lg`XFEV#rB} zPKlCcWHeR5d(8U0U>SUkpt`7T zX@Xg1XWm3QZuA8fd)=lVAKf{Z4wp*>ihYfTr*8sD;}*h4R^P|keZQM zs7MkDB@OpY$XxneR&GI{*j+l>$NKEr>Q99LdOvHgy&XmXs7F?L zM?SlOV0@f`zz~wV_qL>l*5|+rg>{EfJ1V%7TP7b@SzsA(b($UsQXRe=qHJ7c_7`u! z@}3g-WD=yFfR6=;59?E@eQaKAt%=qJ9?%kaWR6bJoJGfVdFR#8mgCKBKMSdNp=TjW ziQ>fgT(a>)vr|+bE*QTX`7wcwgv!0Ud6v5IjtT*p8FVz+K>74 zN@(HV1{Lq4fG2w3Ud!0S?+9%0QI?|b2ZpUF6i0@qNJ(E1UPk^Hcz=ri75vAK6(_8B UYvowvi4}H0bY!gPV)#b+-(c~OkpKVy diff --git a/resources/builtin/alphanumeric/Md.png b/resources/builtin/alphanumeric/Md.png deleted file mode 100644 index 8a4bea48df90e7a9a176bc757e3a833a320f9c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1599 zcmb7EYfO_@81C20M=33~6k{)dpHM{zL#jmtA@qZSMG?7=v9XD*f-seffTAF!sI8;= z)eG7n43Q|Xs-uWRSf;Y2?NFH@A@fofMitSHn+O%1>=YNXpW8`J&U@bXeV+Hplar&2 zjaf&da40w&jus^r#p7@gX4_-}$h4>H--BaSY;LjOV-j%7G$ot; zDB<~7)*;uRWadVnnhP6nI8t+z2u<7rS$;dH;-Pd=?@O2F+Q_+@kY`)9*mQ`)`q^%o zb;|v}PYySYuSWm;D$QEezLu7X2!7G zc;niSSAwgMxsJjTb8`8+UB)0fnraB>S!&#Pv2@qh<&U>?7uO?gQdb3XKk!B9Iizi7 z?;y|Us?Q%|Y{1Hx8lsXDJKa%@7_>=o*h8J82&*bU%KNc4Z%UtTTM_!=B)CS`fC#@@ zzf9b(UvmJ4?m=Wqm|tkUAqI3Y+cfDOui53rC$xzRz@WaV`SL`eHELTA-(* zVV2Z2lrFD4Yg|&gRxV}79@A;Xx~kJp7mcRb( zDr#ONdw|tis;Z$m6}vyGlUW!mVC9)B5`1^FofCY$&0Hzqb&fI8vB!O@d_CafLkMpNXxC#=s3SHRZ^%FC*j zCYWV*GtuBn~>Zg6+=1`VBk~)L>@QMCSg&4zMtR8HPaNe;?XM8aCZv~sTdhW z@rlWFiBvOp`Iu8W6Xm>)UR&Id_Y^7p4?oI63LmB z2=K(QBD!H*#uCXfePip}@6c4+u%x)f*+5J|VSoac&Wy@I=3$L?IyO;u^&cY!nGn## zA?~lL9R#8Y&=tuhQ!2F{wTe>z?C~SpX_6c?e8p381UH}$j#Tjo9RX1 z?K>)O!**LR3fVeGI;~8KkS7Ao&cCNoC&{2|GXgi2-BT*woV+M!@v01HOpX?H%dG4u zU^ftqPtp+>LUQ-sk<`%o?06xt?l5XY1$A;O%Ey%!SO#33rU!sjhc|~P8&{hB#GA0Z zrvyHk1gR$AqyFN<`V?v(n-^1SqIH1>9{V>yc*g{yt(ZsAr&ulFJdWB zoEV?fi{L6YN@?;+yqDBAy^jCo%@%mXPc6k{NKl>G(ZC@J^tMZ}JKH52b7XqKY^qZy zu!n8$q*=$5=U^8Wqq+_pZ&01SQ=_lD%Kb^v+qWhibx>eVZu zg?$@XvX26u=z;q!V~@@g*x;`$L*EY!TazjF40n-&z9g)I{2}oC82u~wuYaqs-ldge SDNi_M14Ko{h%Se1F8>>=7hH${ diff --git a/resources/builtin/alphanumeric/R.png b/resources/builtin/alphanumeric/R.png deleted file mode 100644 index 1afe1261b02d91088c92803510c0ba4eada2133f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfc5K3f2U@hIM68Kz=f^yuiFzPj)z|t6?FV}+MxGykPFMt{=~cA zl+;hWt;kQGDE!214~Vn2ey*$EgxkBdi<<8Atv$h6wENg*4z40~O%Q)4kT3mBNz-F@ z97s`#n5W~djUtwgdC`KROZIlHP9}jZVc+Wu_P^g~d(>vkKmIT)zI5)<_be-;x67UTxiXtvN~LiQgkfZH*JT@_V{jSa~e3qGRJf?%SzqX zmfjO)-AaFR)YStTgAp9zMqy6heA zdCCh3K9Pw!ZRyDJa@~U8KUi-rFFReq4isBI=e#nU->6aED!S3D>fHMUlVc~`wqt!elcVVNCNpW4pE(ov z%~SMP8+n_zDdfIg>dJJEO)0#(j#)esQB6yDbR9pnPg9sL8q)==@u5t{)UCB9tSQ6sT5{#PO{&^vU1(lCDk6RD@|X|(s4YuX0|@-O3UmF&Y)nB znpCJ7&DU(Hz{t-k_M0$^S#PVDN<{|ergWg4uciXcT&b7SXBfO+-%~?yw zZ`uiW!zbJUTJ|;4*?YoLSC9+ONJTY;%r9Nppy2I&d(P*rFIE6muHujQE~-)vv@`qK z1)(Q4i`u3sTuqI=ui~**7i8n-4v?X{8vHA{g$%Z^bjn0EJ>dr$b_!_NobW5p<|vqM z2brVwpe){z38Hg#%+e^Ofr(%|Xp=d#Wzp$PzqW+u!4 diff --git a/resources/builtin/alphanumeric/Rd.png b/resources/builtin/alphanumeric/Rd.png deleted file mode 100644 index 3d5bc1e8b17f09b1792a752850987d4b7fb168b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1266 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPK4XW^J*rbC!W@n3Zr_0@nm~rp6--3@ovpE{-7;jBoF<=e3*?YP-0oQIY>m{Z@aC zJtfVPd;V$9-Q4QGip_tgW}P_E)?e5v|GGU<;&}LVQ9;Llrww{P2f48P>`%P=O-cR4 z+lu`3iNa6J_JBBR>*u=qO}M>VyQt|--`W$LMZ1q}=HMz)*97r*0{PP4lr%kd$AJ`; zht?U z^(Kj^pN_ls8}_}vVE_A#wnuHo{NoR^;!Ecqeb2Hodb`}YuL~5mKds%WzoY9uPm%TU z)0&e+p7=d-)YdqWE5E0kg>`4|+sW6eniRHLUfbMsrD&`F%P#k(D|1XYv#iv8ZRtH> z)~)n6N1YwdX}{VY@vVEILb76q`PUx% z{oF-qe;rgkrhgS)r?7sFD!b#dHP;0k*R5#Rah$d$G|2H<{jHgKf$P?5gn3@?O1fF4 zDaUcBwx-UJ%Q+jtD@R?xvs>|N-o~OK! z;1ijs)0U1bFV`*j{e$)9^0Lzv>_D;gbIvPsY+4_FX8A!D%k3*`?}hC5obc3i>w1fG zzhs-{-2L{o`u_T*`}`+7Tp!C{BknjMenGo_E!U*`&J+H~HSN*rRETC3d=jPAp>R0T zkwp^dZTD~>eg2f62Bjty@r@egt)d&fs?NP%FgbR@Z9CStGdYTGZ!(i+`I$3u-#kT+ zwUM`Zn?ml}rLIip*p$Mn>zKtO5!JMWN7wOF`!t35vQgQ#&J)h_tz8FHJN@hWmrYk@ znQmdR>~C18>T%$LkV;_&=Op_rEGyS-T~h7Ay3+LZEFH&lYi8@SuC&a~;0y`|sY!*Z z(R|I83XJ@$V!sKqnDw@bsZ?ZeZb}E*`D!ZA%$14>Ky}tYMtJwFIl@cY)||C;{HC37 zH+;e!pk-epoxLY4bp^Tbj8s%p$o$fk4GP}gx95D``eFr8tBIc91z* z56a>lnSh!Zf%g3YTKw;V(2_W?5mKAXo&%Fc15i~EP{B{20#%SFqk$GK*|r9#wlq>a tl`H6Z1#9j(&Z61(|Mp+6WhAmBco4sAQ>Rw=C$)tj4W6!kF6*2UngC37@@@bC diff --git a/resources/builtin/alphanumeric/Shrug.png b/resources/builtin/alphanumeric/Shrug.png deleted file mode 100644 index 400d911be8ab5fda29eb252cd092fc8aafd705e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1167 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfYlW2-HXw?%h;-eA-AZPnK9VuNenR6|wLZ?u17p17p{al=*@p+`Rs z+8mp0aP=GCccFZT$}Q%S%YNkbI9JcE z)?%NJtUblnCu5qXzkO?CT5)sl+!tbdvS!|{e5P7)b*)*~Wt%#g?JAOz1$M9)e zWrLc`Wfz>O?M$EcJMyyC*1rcg?0=r}Np5|z<&XD24uw9Jxqm+G$-X0oshiJP{bxyi z5f?3BbDcfjfH(dR>+)hX!Bf9dwp1;%e`(Ww>FeKpM^3kWi;3xu-Rf-AoEoOrA5&eb z_WEARvzW$!V%9^-;R;`v1UZ-lPyAa5$v$uS+9G~f6x{k1@Ms%hbQ zoysTnW)qJKaGp?p&9i8FW^Z=n`?Q-&jL*)D(%Y2&>b-lU@z%Ggw~S1;J)5?2yS(?= zE6y_u&s}lvbD!+4lPSol)7vy(8I#%#9|5j^Xrut(~q3kXHZO27wuGnq4zbf{F;o}ScR`?xspAx!!vd^hy znfd>0R3<6%cdBeyR%P9?uJ*LZk}AG6Y&+$qym@4lv-W4ViqTf(X*;H+3vSZcvSO{| zW~0pGE=Co-#nH>m-;jdd7qUXkr97*uW!e3*Bx7xzj+*032O35 zz9zLK>W7}=vi-nNJ7To`d7DspQaJ0BGs-t7O%Ihj`Q@$tndA?gcQ5?&iETQs@%K($ z{*C7In%md@jS@Y6TzC6czO`G|+I>^K$BE=Ue9Rx_TlQb}mb)RJ3sU9j>gTe~DWM4f DfBiB? diff --git a/resources/builtin/alphanumeric/Shrug2.png b/resources/builtin/alphanumeric/Shrug2.png deleted file mode 100644 index 2eb4132a5fbdf6fe6b7230c8bab09f9dcd0120da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1167 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPMQ#&Dl4rxNT;bf$Rj~gj%b@N9^Aj7?^)~x;TbZFuuLZzU!5R5Zi@GhMNlR{ZCUb z^|L9KH@kZIxlZGM=Z!HS_Ynmi$geK>AN*+Zk%HInOEdNdzFsW9{6SJ|{PS-vZ;uPb zB)`hGUUYAoh4f>qEswWFcYfYr)AnuE*6w11Yu{8uRnl*?e`B7wr2lclRu`d1KMvX) zn{9CQ8{c=Ke22;{=90^Poz{2o1KrD6nTuzP-mL z+a)}2ZK6MHT335`+qdNHNBF(A+na4ZaokM#^RM)!ovG{J&M>WroOwHbNB_t0XGyf{txT&Vl}~2zf!hTEwg`V(|zgd-+f0;w|$F=>5kp%Y}A|@rq>@+U8?r_ zUdpqW#(-khL(1U_Uzh|rm;_J!XK&o_?AFTQ;<>4Y%eh)quh()^uakCux9^tc(kE86 z%l%6eJ!XbRFTeErgYneVZyT$$w%Tq#GIfWhif`(y+r`N-9h)@Y_%8jmKzFKX;d!0P zC-!C&j|*^~P=3v`XnJOEcI5lCn@fz(&WzIAl>X|yd!+H!x2d;`Ot(FowsO0?_t`7X zGYijMaqn}V?5>pRJ*)lff}hHbvG1RRsF^Q!NcU*0z74UTDBSbI9`k&(~2Tg5M*PV_GQKJoOk zcgo_ALyb<(`{+`bWVD%4d-|%g{(7d@nOkjY{!jE?zd&*N-DL*T&&~O_om1sUOG>xS zB;8Fnu9!Xvy4&)k==|0bi>{wgnQnJ|)pWz_O5NvDJ@mR4A5Agw@HBzTE(O> zJ^HV4KTk8- z%;PRh%Oy$IfHz!RGl{@+6t^S$h51e-|{PT%zI~6@vd$@?2>>*A B{nh{g diff --git a/resources/builtin/alphanumeric/Ud.png b/resources/builtin/alphanumeric/Ud.png deleted file mode 100644 index 3d5e9e7b232d9704dead0ff48a146466ae39924e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1109 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPOo1W^t`mo0@^JtTR{EgoLp6oF*v-2Id2vE{-7;jBjtUS2gbvYPgt~v8?+4?ApI~ z=W&>y_-m2Q`SY-c)bVuUtqzF{Ij(*sGK5p9L!pUd_!9E!9SXe)>{*+2>=p_?(f^vx zdUDfjh5B3zO%Hi-lX+j-U$Xvmn&$hlZoAHGR?Bwc@EyuQZr^tK&KG*90OKKDgSZ>9ay`mgV<{XX^K#W@S7qK@oWn{s--OKr;O?T+%R zklOZg($}T0T4rvwxV-<`^M}US9=q@5KY93ljaKfaeSzsWt>kO_Gn8bM*kxbmzANZI zE%o_9@?O95hw|6%bgq7*o7BsF`_qNsC7!d7zQ0@4|LTOW%54tg*Awnu+Vk#@+}SnB zWs=^rB3zT@%(mpsocA&{_MOqO)orHVUp#uW?2NP8?>kTQLSydid8T*vPv7BF`N65t za)BwQOP0Jhe&Tof&rdl^Ht%;=&d9$HbieRC?ySK18L#iG?&o-QCwuSF$H(+)75F8K z_y7L$YVR%fplwgc13%763N^r9*9FH3&T*ws7f z_O$+&&mR2$RdZ$6-ACDf_fFWc;n~x9{wr43b=c4PofWxxLCGTH@}Em~ty{I~?eBeS zS7og%->R{G^2^ULwI8ZO=dI-Wx8mIAD}fIrEFB&)B*vV7Wyog#G9kZt|Fu^OJ^VgS z*4X6Qs3iVwp@+2Uma3Sqwwu0fWKW*#o^k9(d*$i#(a&!5W`6y%$0V7ve#WJf4<_`4@;GsZ9fcEBHtJ7Icih-bJw{IRf}&=S|6ErF#2rp z8Mtv&WDmA}k_w}9e#rw}5T>kZP*!1X}P zdCE}A)))?!_gKEYrk>DIJ-#+SPE0k-oByD9&$;Jw&%O6^&gb59&%GAlhcnPM(}lrc z1_b$o6N@RttD?Ns#XX0 z(a&ea$gIm+Hd@Qwo;-99dnkTh+#x0lYP}=SiCu0G%IH~qQ!%cViIf?n&S~9qgQV>b z#EHS5`OQP$3Y_OLQchsQyn??P2Eh&q05zQ&cz=0ON ztRziI%G66sq8LGfL5gNEBe_Va(;Tx(7r920!uUdhfRQIJ-&O+O$esA9Bto&N9xDJM z;Tt7?@jd_0f>Jh^rhwbwNK-&r&RrN#Uf?c7=g_t*)iC$sH{7tb zBpr##?t#>GlT+L-<6IpMv;Foj0&Vad^3vh7FpNT9di9A0G&L+}b)W&t37L7bIpCIA zOvdn{Lvr6=gwt8_YG;=vdi#>ZTjzw$((`f&}tz9^!R(~D6r6t6JMzz7^e zo%Z=2vKd0Y+s$do2${nuB0i-SixQ3yE1!xxbu!u)lA2*)0`XWn>DFG(fa2)K_ny_S zu(|ovA09lv?Hwy8z@Mjjc2Ukj~EGbHmIs##50nt|-Z)SlFA079~4rmVYe=TX})D5AiyMRex zn%;NF7nNSBpAER(Nmx(JSA+C5JFbo<-!POojzN`pd+uef%t3UB?zDG#-A#1Zt`y6p zaxZttuKVn+9cpu+{KhGed-&IEL4oD<9M1miVf#|AN-CFP#y}&%)3?bJ?PUy5)|*Hq z;KmWs&^uIa^vr`7xS?Hbq& z6IZIv(tv;F0EDNw+ry(csnj@E49};aIU7I*f4jD&*`vSq>Sz}MMQqv6ziW-?r|aLPQ=9?h)M%P+y_HHr2YvRDlkprij`VK--dMELBC(>uv+K*`QbeI@ zBJ;{joNb=mqkD#m$F-&vxL4qD4XJE!pT*0DYB|pkik;XodjBLU-EL1;qZuUXSYqQ* zy5hRH=xeHVmXYR4%!Rxor|5|HW0w{RI#eGfpFO`=<30}H!@V34q4R!{$31DDw$gYc zbd=py(I9XvFv&yw6!? zSk*kLpst33$Kwg-&Rf;kv8dY#i{yzkPhrx|osNn#$*&P;@>2h{uX=$nm@r16-dC7` T{PO3xCrzS(r zQ-)Hu=I6ok9(()tntH-Js>j#n$BC(idGjCi?m72-&bjw|?)}_*?zuP4_z?_r&2(Wf zm;s4+>KqKF25h^whAQ$TW=N?5$1^^Go+|vmRAp=@#@I^s%*5z}CXIjz<$z&_ST8hv5i7grKN`92QE2sECcv7^#pQQFpwwxJT4M@bBPk*LUXq|BM_#_82(g(x`F&BCVoN<*0E8np zi~ity{H6sZZkCz?Zb!pS0cAONaY%WYyBL|3u~V@Td~!%SS2NI?VR=KH7&ZTf8?v6D zBQe=Kl(b=Tn%ixht-~qpxbu@h8@!0Rax^&vr_h&Pf2sjZj|$oxG63bI4Bi3<+|moF zI9_B>_PbOBlO?Zlc3D=68!TGWu35mOL3lerIhG9wOcy=-ctMjUyD>W?=E)T}MS$PR z5jb8E)|8Zbga2O2#{XzcezlZ~8Sh&|D~{15{pa2$Qs z=Ud2n1od_=r!_5T9;XQVm{cf?J4UX2ChF2j>sU-^fq`-46DgGH{hT4i@el7jYF^>9 za~a=BjLfWaSKH`yrHA$asNoE@(hxv7JBQAXmX?(~6ZXawB)Av$_Q&ISho#ku6hs6| z-oMqN=VU?d`IJ8BP0NwPz=lw4SGp%5AV)5A1w!3v{1-YP9OVC8)WNAAK{NIMQ@{*! z;D|3erC2``aJw6~5ud9D>1%dg7t?MTN*u?bN}@gY8dv5ZJi>I^zp~*bJZe{rFJ*AA zb;@q~?5!JVccA~m$&M-`4CtSa)6AO+u4f5AyF>AqO)|5t|6) zFmIuU*`@QmZPARrY(mnKHfO3k<|9Kz3$nR#Ly13tqRiUDjX8ShAI5X@i3+7<;-ifSML3>o!=bBy=+89y=M&Gh!%j5AKh~I4zMY8a=u{Pc4V#t0sb1 zrW0&(nx+p7r}dZ$4)bm@5Zkz=5?w*OfGw2sTMl{5JNp3k--aok|%x19yZcg6m*>3 zUF98GY8fF(B~_-8>?2%=iX|7M;5}=#>NH51DpUHmE1#Xau$fgMRD75z3@@7!@$4IM z5=+4hu*z~_F<8Oi)#0+SzrE4^w$QKJ>9+;m67v&(wOcsT|GBk#S)vi;bNB&grNpxK zaRp;77(5wEx_HU5){e#4Nm`;#CVTWI?Aqn1I8S?x#88(9cYNU+?2S^W59FtzKL0*p Pu}vX)`ki{{9-aFi6jh%v diff --git a/resources/builtin/alphanumeric/aleo-white/0.png b/resources/builtin/alphanumeric/aleo-white/0.png new file mode 100644 index 0000000000000000000000000000000000000000..6a54cfbe1c6ae0967cf34732a9106e25fc49365e GIT binary patch literal 1584 zcmb7Edo#MCdNJ$yij-Jzt~SCfxp{q?A>Dy3q{ zK9(8?q;Lo2?Bsh@<}07L;RL1JTYaegP& z&Ny;R)3?jx8~Gw*TqbdHfU8t0pT`Rz0v};OKMmpL-<=+7so8=6IN5NkHAlq6mZ1*RqWY z^`+xz?0k*6QkD+Bg~s^)Ufdr&62>((UY(>8_R+f4ym=-VhId2Hlk;x#;jqu)FE0<5 zj_WLBBDZPG#wbe=s*TQNr}!ajs(O+sc=4(Ur)iM|v2mqM)aIQWhl|RF!=sWi8z^z? zC9&ZM6wWXo?Yo)Y+W#z1q-vc&4018fud*3KWF$4X)&59`J#@ZBxn*jsVKfli7{Z>b ztTeW0=oOYKURar4ni&I{hjx}`U39FHiVw^fUbP~J005GX0GjJe`YXb`0Tm#|p&AqL z0aq(N5W7pb2+z!L>5gcXe`Rmo6~?6`ni;3XFElc`RtyV%c6Wnx=Q}IbXI_?Z27I}f z?_DoGlZhkxVXH%#&2qSaVuF3F`XK$#BXfNt{>`n!(>7g^i*#%xFElL)Cq+hOr4>!# z5kajdYgW7QD)(`E{j|Q_iYulI;+a-{++)`@JneeVtjOxq{EO6*vDmA;`qzvr29bqn zwVl9%#nSyZLO2x_?JXRN&c=d6q)uduiV|ZgggB#F=(t^AeD3s4DkK%*=?o@2hROah z)t&+vc(U^0?O_mN1I+~rrP^$Kki;yl8+q0nim47Js)31MaD}R@B*hUNvLo_risNlZ zu)I7v+YxW5Hf|w%$x^eea6(=_MvfS~<71Z)mDcfAos>m!j8>V=W4n004@)4qL3MS# z9+iycgqrBq!WIr(t6I0!&-$XL17XXk>~lMl{qo&p6ihi9JPG5qTL9cP95DTD^+Cfw zE0uE{436mZPd#iF-!gJyk%b@1c4y&2U<(n=KD;0uEVP3w)Kkenxy(zKvB#NVK1&Yg z=hAEwnTMGLGJ)XZWQgT7!LJDsZ>7~QGRpdC>@-BwcST^^49RbKA$ars^?c>!)I#C{~A6jVlx3sZu zkE${{v#pNK8nn^wTfTM6g*VeUsFj&y;bxy9Ozre@IB`JzveoZUA05jv>vpe+e_};l3DOwXbAq}*Ba(m+7ihA*|n!FZ4-@iE4 zwD?Uzt0_w1cZ^f|4#vHHKd<)|HGzym%0(h*qkho2Cn%cni`>J7wb^ zK!j#T)G~wvMnLM&CBn9_0jWJF)AlJRrv>%y>8O<3q(tu*m3c1iR2o3^47s!8Akt{& z9qcU83O_LRWnM%3mf7bhheI*RlOG3ljOdF8zwv?1GHr(@PX#qrZ~t|%{^yWUcxz&} SY_N8Ab4R&&IM*EtCjAQ?cJ!|R literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/1.png b/resources/builtin/alphanumeric/aleo-white/1.png new file mode 100644 index 0000000000000000000000000000000000000000..0002e20ec465c7f9de517a9283b0f5c591ca96d7 GIT binary patch literal 835 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfpWc?Ln;{G-eT>0oFLG0aogo%5B}=! zR)~?B=jpZj`??RDr|Ng_PzD-96lnXHfAp}-FZnL_nNbr|in)bSBBLiL+`iSsa`T&* z%8A5$$0nKGtei&M6&$B+WbK^4yNTtDwjg8Hsz<}yJ54N- zKwZUgoI(j%j+4&ldi>iXr1CC8TJlKtA_d0dQI1S~Tbo#BL{IpWoLeVQY_8BzS$dPz z)9Tu}tB#I))a0}@Ix4r$_nNRE`EBLu1q#ou?wX?Dc>GqSrejmz*6XX*C_J00V0rvj zElBR&uFyDv&t4NIB)^Rj6*-dqD5Qx+Hv79Xr%=h7yW53SGUM*Pn&-IV>*ixi-$}Q; z-_gjV`2R`sWkFcqT`Ku^TL~4YSzjF z9r1QI|JMf!I=}P({{qUh*z1W3wA@}=ZzaFlsA&U_eMl;+qkyA;ivWut3ycCX90gb$ z!4yQoh@(lNNufi5Ly4ma$b?d05flkYBt1YT$V`|B!WI_C2|P%K0gVHh2@`?Y@=0E} zC0D}lvPtZ*f7?GA`Cc~Q@&0&~^Vrt=De}h)XDz#IkaN`i&b@gLQte;G)L+{vnqO@7 zeR@>;BVND1Pwxe_6xZ+c{#aGZesuNSO-%+M7w?$}cKDt~Al0EjRKfx)s$tjLm}jE= R;^1Tu*VEO{Wt~$(698yEKYaiI literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/2.png b/resources/builtin/alphanumeric/aleo-white/2.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f4c558cfa78d0a2ee70437e8ee9cbe41efccba GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopf)zxDgC*Z1unl0raphye!@XKmYCQeT*R`v=Fbh0@DE%|Es?d-{*E7y8?` z+H5#`Sm-{(+kI2jeW$DWxn9nFs(QKeI_KN9d-C4SvS2Y3X= zwOCf1+;nyRd9&#oZAy6K3bntlEtW4gxm)$b;Ly@LTT8udHrRL-anHN9=4s#7?sSvw zi|e*XoR;0LIfJ6wDE!!ueqq+j7L=jmDA0o9E$em_Ndw5}^W zw$%Qwy5jfV_m6qQKd*@j{+VCBCsjN2f84CeWtL^l9&=B7&X%eDXsl3^*C~|jY})YrR$aP?%Jj8=wwwKEIqJ)|GeTVL^3FiL=@-{7*}3DU z)%4ZwD~e|BJ*znVs=%aE56<0-$>Vbl%Cxbc>YaXHW%^ko+o`KV6ZMi;Db6*!zS*j0 zn{QC&-aEHgo4B9s-ni2t=w*z;N|SpxXP?gCopkDG^vp|jOOOBU;`F(H+_IzmME-n< zi#x@h2hB8DEg7bEI>gA<_~@I@IV)poxOJu;3@;6Od3_0Uhg_Hfr%v!X{*|vMW;vvP zvYi|9?9csx>xWsipSuePZ%{aM)46{u|CbBO|0ho2750DjqEYT=wFTqJD~H=Ua`RXbT#!Qg_Baqj1OYxnP}T+No_ zZ)_bSt2rhuaF1p=c||#|X~`?W%aV>?R@5KPuvG4lbFS%CsM-P)RrJ^-cad|_s&<8w zRYx>DR>?J~ycS%ou(HZUP$jhAbwY^kB3t_oxuzvAE^ar~V`sm(IDdDojQ7^VO)oZX zxtpuC|5t^8?KS&okX37cDd=Q-N*!TW6lQrCX2iNsSH770QjEergHQI;CTVe8k8!+F w%$j&cv_&^upi7~NL#YE!a1fKhA!^uv3(i|pU^LTs?SGJfr>mdKI;Vst0J#4^5C8xG literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/3.png b/resources/builtin/alphanumeric/aleo-white/3.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f3d5b171c62ad46d0ad34dec7c01df2b39bba4 GIT binary patch literal 1573 zcmb7^`#aMM9LHydulu%KBD9S)COSk7bNbdMoW$77kV_YL6;ZiVwr>~KNs^{iBA1F} z*{PXQBDu%(C_QO<5>M=N~xdyq@R%yx-6J`MiJqaB04tx>}}MFc?hN+lv|i zgQ=YRB|vq#so&Z5bJ^C@d>9_fzVtt-=Z!+kGgNATFCAvSjio%5*bl`4Yx1{ZVCH1^*TQoyc#WQo56kPr*gw0-d&*CBahoVM1%G zb^q0rEJ^*_>%ea{YSP6l(!2ri`;8q+0{*7x(Z-c>2kpGEqqk?(X+zD%Ux!iS@fv-M^)mThLBFZg)ep4nH%jM?j@#cV8qD81 z$6gUWS>aatIiCB8V&T<#s@R0P@;s~Eo6l|wG38W}S!T^^`+~-rK1Wretp`@)o&A>l ze-vp&BqM#Qic4%_O8F-a$x~L@oz!H0DJO->2o>nHtHgL_MoWyvkfyzMi)Gylwa4;v zmLj48)JxF%;gjSa8W^29qT-k2&5Oc^jbECtwzv6q_rSavU=JK8PriVn2_lTXf>o4* zB+G)Xbu`1Zi;W>WcZALHtRSsOvVCVwh`wMj78FW^_$<>8C<B!y;II0Wqr9^dw()jK8R}u18t?FwoU63?AgOG6p7uP7LgLozx+l5-hBkq1`A4Y!D^=4i#6>{h&|W8R9USAh~W$wLk;E zmvSq+FJMC+JXMJortV*txNAH*0Vw+TUIklMOnySxP@o}tBnR~o`|0(JH0wZUP98&4 z4_`Pj`NJfoon9jOZr!`!YkRtSe%gLgxZZ`(#}i>!x=44SQrNpxK+8Ttd+o7cc@wHE=oa=wbg;VTkxOTJ$yu3nbI&bkI|KerJ&mbN zcZZYp#((Y$ACQ!wp>;X)GC0AvxW{X9d&RpQuXOslwp&TJX1jPaaHq-6``NdKsMXTh zg))15{8%n_&)T>R`9viYUpSbE)4b@?GgZUGrx{G!PG8q4L`TT@S5}9EdW{A#nfwXaXQCYHpsqZLrS4p1Lbc#6ZEB6kodlV&AiVK~rw+nl$LO;5wSXzJ)%xrp~7(@}Bv;3s-) zr+G#y5z1PFSZwSwmYLYK$?F?f`h;+7^FAKv?e69`5rd%__8#Zw55Sw~rVUW_e+4$f$9DM7TnPR(_4e?k)^3S}{sy@~ B*#-ar literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/4.png b/resources/builtin/alphanumeric/aleo-white/4.png new file mode 100644 index 0000000000000000000000000000000000000000..ee847ed0af0d6a56dde434f9928fa8a6f3603502 GIT binary patch literal 1016 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopf?YEBk=<30_0m7{ z*K^L=Z`!@Hxp>ruQ z1W={14+k;0v)vlB(!!3P%;)|WDJP7!cuvp>PvLCtzb*p z*Jy8Bp%(xBTdyiRR(y|k?*?i-2DfHi7m(WqG~&q`kP)GQKo^5lTmz}NH&x_FLyeYZ z2eRv?fn=V6h(0l(^*tapZ$Ly2$Td7oF0wzYyeBMSj$bdN^76p-&?c4G4x4Kr8^G>c zJ_+cRm8!sytOYqbWhIDM2eLZ@X!nT-kn`g}MA%Aj;4v440R!gKDv%1e?;#HJ0@)HS ztn%u>^{6Hl*&k6r0q%*#AhUyoRk9q838`c{d;<~NKt!LK$CZXTsvegb_5c+!?(~|l zf>DyCQ))sv=Ohz_`9eS)vlIfEH%(LUWZpCdNEl5A5vGol*p{pZX?vr3LU>(WzP4i% zU(MIWoS#}Y*C*;YCh58Sdjj+&?}^YR8)F5_Z(4eeo6a<)++;mz#5E~ZK&3|^(adpE z4a><*9FtN-RJ?^%&M10Jixf~UdcQ`+uF*b9HSkI7pR_%{9`o7$%aZtC@4bIxPkhEv z^T*bujsh+MEP^bKERHY=EaEspNM*hPhZ08eeXKJPR)zP3=h+spOICg(E2#|~pD^iee7&um`*G*dBOH9@Iu zJns*z`Ya%#rp;iSIzE8BV-j4BA_vN-WjmU{<@W#v)li|%eJ3DTWMW`@s1->nhNh|$ zYwl-W&2wU@^}gN@pFLWa=M*;P#l29sDKmsptz@S{OE2@DRVgpaH7}GXm69WM3{sk< z;inOlf?~fa>b^HV`O6pUhve~ie8=l_m%H5`w~SSgam~E$U~*qZ2~m8WWL@`VFKs+1P-Kn zX_89N*)rZG&w63FvkZ;HL8e5;+E6%m>&g2(^to0bA&`FGXD&{YsKP(6eiS=e8s*}E z{x50RzK~ecpv^F1TXrN@f^r&ZL$-q!YLGW344KlFuvxx)F?G^>7p;elqmPB9zy_s| zcvW=BD6;u@?^&%UORX*HLd&R%i>(Hxh(yhDK@1${5*bn|wj7hlcPjuWZo-u}zC1b2 z_NKW+wncs{eUE6|YwMurhyn@;+U$f*)nh@|-?V}1bksZ5B^zS{IG+X1=s(uoe{mR!y+lV^a%dfjWq^2h+isgN|&uDpS+cGLA9h|nTi93AKP zgu9Y|w=JK+K*!FtzAdQiY!O8;KKPYH-h?9&Ts@g#H$Fl6_eDIqJ=exCc?TIWQ7xLT zG*iR|QgIU9dM^)*YDk&!(iavZ42Mm5U0mh!lHxN9hMm>cZ)0=C3yzmhQ#f~6&{_M` z1o0IsgKEFEc_ARxXt&aR+7ggHvle-q!LrUljWpPQBh9Dx@Q@yUYQ>Am1w5(>x4ut&XNM`5h_ZB>V9(|g%8S+(`hHO#zoCpSoNC-49)#ryGKE+<$Z z8GWED0jISvZ(7-BJw`Gm8%Y0f=)!$I{mQwKPrjrgOYGc;P0ejV8}04#75A)DIkOev h-78L?^(Iz_9N^r)@`lY1G;dbBcr+od`MYE6{{TA-a3BBx literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/6.png b/resources/builtin/alphanumeric/aleo-white/6.png new file mode 100644 index 0000000000000000000000000000000000000000..b58575528235b1c21d8a8e7e7b0cd1aa15ad842a GIT binary patch literal 1541 zcmb7E`#aMM7~hyaApqZLm z45f(Nnz@wQTywC}L1`3+Gyg&7^E~hKc`u*${rvVO*^=;z@(1NXAdsT9mAO3#1ZM06 zR9e!h^KRdg5ZadLXd&V4|B1S+89=fIr`eMnK!=U37)^7-PF+60ZdCZAieit$6CjXG zh_yM^F%rBu%7Y8_Rm`!=ph!K#Z9kt**Zz1*^0*qP9lfO@Ir39jFTK4|$`nkV9ukku znEi0A6Z`4V46c42@mN^&)0@Nf#|%~rh6X)!oS09&{q;)v57a(iS4o!&%i-ULm>3`d zM4^0Crp=AeO#c3{yTPL5uewOrwZgA^SGP5h0it9(!B=VJgEX)RK@*FMZU}e~lP(@_ z#F95w{qcIk7z^O<-Af~>b9Cwo@zn7^mK$LMKu?K zHuXzrbxIhOj5jhY|EMLg8j&&S(pabjhgK_w;49c8EXq4Kg2b}gQYL@L_B(bTBN3h* z3rXhQm&}NE*elLOmd=A^h2hX2EKcmE_tL$vJST50&>_%S7)abay79+10?S_O%;(nc z2DbkE*ic+ybA3IRf#^6@D~B5U*tmQyD)?I!ZGX+0%($EB7gXh6xDaC08vmIvZ4$l& zy{CUlNDlga)@Vle)eBSYg=Z^wB7Fc8e_KJ&JlP)o_+>mz!DpF;KQfczj#$j~vNu~tjq zh*{ZRteP`)SDORfgVN@O5WK8anb@M3-`!g7xr@Qrm2##x*jnuj8WYW|BW7L6c3HqS zF@NQm+FA;V*Kh;G`I7|w_t%Nax}jAADY4U)UVecQ3`Zc%bs9eS_K4>%@$yFGFIPs?Se zn}uw=PSu>zzxg6xW=UM%q--X|-~+vEpRm5_fKsm5T0yn3D*M=HQt>oOsA0*o)^8F^ z!y<+-2)y@+2C^qb#Urn>kn2lb>PD-Yx2es9h9aa71+y|p3~Ao=GoLI9cBr0vGZw>eerJUsTx35 zdla&Sc&V-XRbvPfnwoTN)t>iZdZTfArmk3n5Hma&uc@O-tG|AJ@x}XGPDCwbQr#vU z$8E2cnypmZq#zjYl;skpMCRNV_6!r$@`EV{!y`FR1Gg4@8;;usF)i}}+_P-p_z;XJ z`gOh>zy4_Or-Z3I?IsOlfc1rRY~|>Bep0!s)Zu3<+B`*iL0-%GgA;H+w9}pf*j2(Z zBi&_csMsk-4&m$m?YY7>YmJg&p}Jiw`$lT#C&q17Tq6}-{Hgc2BZ3IB{|@ar=ViB3 NSX+?HpWwWJ{{T*{)n5Pr literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/7.png b/resources/builtin/alphanumeric/aleo-white/7.png new file mode 100644 index 0000000000000000000000000000000000000000..0609917f72e04ec7bbf542104071044e0e48a1f0 GIT binary patch literal 813 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLEX+WWqKVr7fs{djPlzj!{!a?9_GK{u>Jcaj z@(X6L(tftKsn|pIRQLqG8>xHh*w^thFfh&Wba4!+V0?Sa&?6;W=IBG~PQz8si#GZs z$EQ{ZFIHx5s@<@j<@YH$me;L~FC90qA1vdp77$w&y)EL#zWnWbF8@4o_wH}L``69c z-|^pTu4e>VhYlV{OTFEHGJdJ({<3@{(<1`TJcbZr!t_70jh<+vo~YM!?h9_y32KX3 z!ehxJX{5``H}mcHFXggEnT03pmo9I%dXjU(`Pgc!l=VjyyDy!0o7{Otaqs+-)4#f~ z*`#D|o#rvwS?|}rHCgLVDo$TI{k58Kr2MCyUku~6&GeAH^m%Sh+0~m9+V5RMAj^HdZ;IIy#n+uWQnE%bzx#*Y zHMM%O<4ZwY`J5?k?KK+u(pzVH$bR~8%KwM!V&`Z6&VEbyX6~1-P`Y|RcqQ9B57Q2p zUz0mrRFo#(4;H%V=lR4=bz-WAlC@!{hl`TXM6k^22`S1PV_4Zf)wsws!}w2(urgbrRZ1>rQOJyKTmLR)9lPyqEe(Vahb;w`%aG~yE#3d zn5a&CJjF#$<^-?-L!KEw+@q|9a#tD;7RC*{ao&oe8Or{jcrYHLzx~OdO z@O+}DGI8=0m$a2&8-6N3b$-2b^|N-x<-VJzTwb<&!sTWCs>%~D&juR&|9(C@dXfS2 Z;~7`m$ZmgeI(QF=>*?y}vd$@?2>`^(W(NQO literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/8.png b/resources/builtin/alphanumeric/aleo-white/8.png new file mode 100644 index 0000000000000000000000000000000000000000..fe328e3aaa09390857e2c05e3ba5998613a39ff8 GIT binary patch literal 1762 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 Y>`osJs_v80<(rmuM0gBSweukK5BFqjr2qf` literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/C.png b/resources/builtin/alphanumeric/aleo-white/C.png new file mode 100644 index 0000000000000000000000000000000000000000..2667930e6f70898dc2040c064098608c67c8d461 GIT binary patch literal 1478 zcmbVM`#aMM9Nw4=!)T(KnVQ(BZR#+c$XwFG#uyWkTbyQ8F4-vc_oLwR@|cq0)dn%CvE5; z5SaIaP}%LxW8bdt+j7{+!PRzKxBe#{=S%?GF|`Of)di$-G`#TPNo`>2)u6j!;2%7_ zA#N@RBuAv!kX@s}(ouyy)dvuk<4Q@<;Lgq3rX{aV%&E}UyK!J?%zSJb#dQI`ed=d% zd&~K255oVp6|{k7jNCx-wZ2$p*lYF6{iZ^k(a<{-nIrEzT2@qxB}VHv`&7AzOdA8E zfW4&;rxX2{a`CK)o0Uh`;8T?O{wBtPiKbxe5dH{88~#c_4ovbOxy?=y zNp5!{e0z`fVo13~Dte?w4ZWnEaWY)?yfZL39>o9#>rM2Mbe|iLVU<-7V!*&0QuOjmqU*fG2jlYsp|GfCI{ICWlW%PV;bgK@ufPhXO3k$rP%b$GYj2^8Su0<= zHABaio{^b-;W>Q|JX_Qu>u1cqz3W#72)J(ACv7sRP+s5k^Bpv^(XeJ;JkX{g9gco~g)N6XV4w0~b{MhoG1BB8C;q=asnIiq&NQgHrAP5JQ4ba|f zA9*oN&ynM5kc#;u;qoT0h}#VLFw+%G-K{ zuN_)KB^xJHkK>u|GNXkT?jN@#(8bmb%=X;shP-y&fSqXr%eE5*DH$16)HxII3h5;_qm0 zOSlVE2B@ouXXDA1aNyd^Ws7?<R9luxfu3P^BY0u-k4x~zt}@N-L`|@DW11*W}AOh?HO!Q-DCRn8wEQKZo zgzfIBC2*_AMfv89&VA%KdesKlyOq)5xYZ==`d+%P=HinLaY?DDM^+qrL2`W{gD;6{ zM53(fgY7ivX>C9k-OZDj++TIkeLc)Dd6F2mDMbRG^2k{$_IpDd zxWWm^;X__tl^^oGoq%-%J5e~}s;v9+=`74V#ok%(Wh6_)io(|}wXDc-dvLk$RN6&_0-wn^*w1#@f4OTq Xp!9EUh2=x66F)q~mTFUDbr$#+|AUH7 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/D.png b/resources/builtin/alphanumeric/aleo-white/D.png new file mode 100644 index 0000000000000000000000000000000000000000..f75ad9a591cdcc248634c2ec32ccc52e96c79168 GIT binary patch literal 1322 zcmb7E{ZkWX5Pt8Hz!eMxkbtqk2@#8c*0B*mkP|~mFd#(H0wtoxs-R*cB9Q{;M+-Jo zPFi)O3W`y_BnXBEgMdf}Pb@lMVnl=@4Yn031`SfA(8K-%c4zi^W}n^tVP|*tSX5*f z(~4sS0ALCQd@%qJG2;l0QZ$>}rYKq(C0ZX!@$~;R&B=koRGVF@IC34Z32=FKqiUbv z(cz8WM0@czkFuXm13*71%mnXa+eaiaqeaU{R-0a? zd^~=ATJI^gaQ!+mG-<--UiYm9t`-do2UB)+mPQ{>+2ecZq3>OHtS|1*xAPQ0?wz?t zh7g*%?f!H!euWsXL+w|tSc9o9Fxb3UA_KHDLrv%JjX zT2(CM?yJ$iLQrwjK;<$fO*%FwV#Oy*u+-0&ya?ye$;qMik~5HdkR;w0Q`b44;_<$~2WA!|k623vu3dw3ZD}e%{W2nN4N+|5G+6T#TcwP=!5sm-i=ALueGIvq+ zxy9()#8|^5h<>FlgOwQ_vAB<99~)gb0}Te#2dLN7<4b=-B|Sr=6VW>qXiXT+_8wGT zfuQ*YcbI%ymkUasnYpmQG~we!aIzy_(fHlTF_v6;rYAGE&`|1*&#vChMthTgWC+Xw zfe?4@Um4IGw<2zbEvsgPK_{kr-mI*(BCHS;FUvRt#Pao)(hyvPurL5|X)q-N7*Pbg zBMP>>j+u-4y_xsKd4hqU#m!Si(9=dA%)U6vRBJ}Dv?KTJfGIP|(l|DuWD@%Rgk&r* ztq~v3#u((DmuqV9@hnFsnY3Sx2u9-`K;1VUreaz{^DvOb29?rk)BoWFQ={3#WRiI{ zOxjy4P~eZIR6O*w{<0G>%-agd;yOOVl~)UEK>3EHY_vQ!$PpG-P5tgb=&qUAPX()XqAd7bda2=;%V!gh{C@(1sb#0(nrLrw=xUTy$ZhL2W^W&S?41_3;ig zuEts88DUN6ep5WYuoJ3HFvY}PgQZ@kZ4I6bQr2dOi9m=Yw0d`+>ijF48}4%43>L1qXvbbjhc99 z5t-$Gd!TA}$)L^YaC;YDQBuAju2or^tMmxeE<3>;+*_vS76bot%YnaBH(juA02mJz z?1GJbQU|oMvmYn}6(ZOepyB2NugrKO3mr<(tPY-wR{bD*s2zM=>9U+f{g6cG)a>UT gqVw$c`6vI?^ta#a^OXf+g#Jkfr2rRq& zQ%LO4*K5yJby~K5`wS%Yo@gl6wnU!TFu}-4v}le%3y0=@F2{}ut{!10{&WMmH(OF# zzr?pFxSa6y2=fq~Bx=NYl1tO6&b4F0?g?uqM4r&+5WLiy(rN=#7bC71sQ6S-MSF?Q zZKag!K;4cV0zj=mM?nacHmDf7#FHN&wG%2E(i0<2a1;ZzLEI1Y2vFh#gOh*~3ru7} z6V#9%b)Xnn0z_~KHVHrpPeoJ-r!t@me7<^TC!U}1dfS%uUk>#tUa!t}RCMyw)p9v8 zM^x#_BvGX$oR&U7bs>t!Ie|{mdtw1J&FDYK-gl9TPPfiG3n-7nfA@@dny)Mpv_CrE6z@{& myOH7s7%XLsM8z#g(ShuVM`9oIZRn~2@jPAqT-G@yGywn?4){s{ literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/F.png b/resources/builtin/alphanumeric/aleo-white/F.png new file mode 100644 index 0000000000000000000000000000000000000000..64c4db4622028a33c38ba0e08b224ac2c78a94a2 GIT binary patch literal 561 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLEX+WWqKVr7fs{djPlzj!{!a?9_GK{u>Jcaj z@(X6LdZxYhhU|pY`KLUJ`I`3Z3D1-VTC%{?#WAFU@$C)O1ydX)94UJ>G zLoIjl#g#k0HJGX7Dld{PU+q$L{ts`(yZmRji>r2iRr|*dG#MQ@tlcco!Xc>S(jlPe z)Z(*5P*p{?U#LjI%j0)W&xBJCe;Yb!Ex*s>)Dm(l`u%Z^m3z1(Kc%wWn=UXZEg^Ku z1QnI-6COJmaqpB?eKK{z8K-$JoRRXXDfv?->;m#;0c9dJRW?tU1>}Uea(XsvDDGd} z@~2B^)2p0@2|OGpTR^tLt;fQMG~c_GwdKr-a~C;bj)bX-5h0)#T?5!6kGIc0+@H{X zJE$`(ch5b^*B74$uQaf?=d%`mIlp2e*QI?|X5Klub)^KmRq)NZU4?s$mu_7t(0lGm s-g2ia%Q!8yAOQt*Ly8D`Sc3U~7*7jvR@rtIp9OI}UHx3vIVCg!0DKMEH2?qr literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/G.png b/resources/builtin/alphanumeric/aleo-white/G.png new file mode 100644 index 0000000000000000000000000000000000000000..46ba2212f309eb80dab67edf1a57d9deb8f5756b GIT binary patch literal 1513 zcmb7E`#01H6dw)K;5%bPW@zx0M6~8XmWVk+-g!S3iNeGtQSluNib+e(7BUVe zZ&RMFEMsUq)}x~uQ&Ad{RUT1G9y|IA+I!AD_w%{;bI-j$eKMRFwipEs1q1?tIcaC@ zj6le6wiAt%cA5iwHl@YHiSBA6ty}*yn)4=8q-)Bt&I}iXrUmvwaZTH_okxnOj}u~~ zx(C~bK*+hCw1!;cW#&4QrAoxLdm9z_iXGeV2O@Ny5v?26XprrX>XJcz+4T6f%&qWN z7?nI~pPgSn%rV#^kni6o#cYzGPd|@8X(_wzU)Ip=87t=0T|OJnVDJ)F)tGTZ@xG2c zvsSfKs>QKk=e9^d_u@Vuo%v_I=>|k~{A{UgNpl|NMgNH6V;w;@DZCVQNxn6C-acI= zAz#~xQyf7%-=%Sfpjj=lh9aGs|DKLt(rmV){e|8WppVW&SwaSL2v`&oN@nXcCPRR_ zlqgd-^T4~um}?GOX6QmporA9X{FKM|ZGuYz3B8KH-0)L^{t&voXVg!Tw$gn|PoKop zE02;5%xN!Ps{Jg|fPKbFF(hq^907=5nX%;vvV;@aU}m}sxWG=mKaWygV*`*Zn|5~$-ZS36_VLStet7oN?{zN z5|IyP`gD1@`A$&m_|8?8idHD|`cVc?m1R`T{if6jA|2emYO*1#e5|x*vc{QL1eTVO zxi(06y(GBAd}Np)>2+D=9z9F7d%`ycxYYqAJ4bjXLKlaFbxCGDpuSofncbA!s@8CO z9N1Nldv;X`Wlnx!GcpJsr%qR{VdMa2P;Hj6$GhUnb^OPIsv!A^r+*gkm5nkF5P2z{ zeB}tX1+(BYHyg|N&=gr9w$VOBFXU!3vOSxKL|)`rOV5L{VEg4$Z@NiM@t=ancA2M& z9>gf{^aA%QzP@JpxXFyJ$<48PAM0(Xq#cNiUuvO{I>lV-EhTL;1;CZqTb9kUo3WJR)?3!@RRA||4V5I|W(z+=G*9_GdDBcQN@|_n#%W(%) zQKvlWhZ(3-x9d4b_>3hlmtg%mJFgQI)4KWwL9s%^X%7$?=vwGHDq>WitU#U@DJ>p?7%9raG>KCim>q&0;Y#pjb_ExEC?K;JIHeL%pNNhR% zm3Gw-b5Wc!JmHhpv@)Xjv87jwH3xW)^~nwzyTtC6m<#?r=kj2TxzQy82x%6 zeSvbQ&G1H-V$uzxnEv<^j+d7irku}*dVY8An((p@&stn4(p4SV62nNDZ6Aa-pTj=i d(GR#H!dnI(cSrHKTSt*<)$L*qI29e!gh@ndp}wL4I~OEL>FY;3o~01BY!;Nn3{*bfTMtm z0E-}tBa0)DQtAI6vG0(*_;%+r0VST-H<#7sd)Q~Mp1(Wp7*FNyUFJ{p?x#+#IOToq zO#J=+^XuZpmVU zIP~t@$HlX&^js^~t*>46_3w>d=Oq(ez1A;ZS^n7e=`RZ_iFH#IniM(|IFvYG6p+!R zz|jPz$dw23%-DNRT5i z6oEu2lW-F2%vpW;VO6(gd)*z`$EWvfO|IEGtB=N?A2LzU43=Q+ormH|PUUI)A&OLNmWU=a{07$=pqX5vT zpL#GB*ifk1P&qT)a*|#Mr3ll2X0!<*xKKMF&RvLP7|3RbeU1Vt8eoTDT2HDKi3=73 zeXSq0ZmY~efy;aEU8`yT8umW;gG;J?{!hp4#r930pbxA_=dEBaQ|4dQyb`njxgN@xNAhY-U1 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/J.png b/resources/builtin/alphanumeric/aleo-white/J.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c81deb193214dbd5f26dbe5badabbf98c25cbd GIT binary patch literal 857 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfud zO$r|BERF(>0xkk9f-H`H3LH&fQHT{#n;`1Uk<ju8qSjC>5FNI{@Pn`YkqOkc18JRrUT~-@sY+5ed9i2D3X|b+znThD8b35M( z+Fn#X{-RUvu$1gYW$%I&PbbRe3g|hfnVWNXpZ$LJVBx##e>}LqZM^5D`Bv_BUU1zD z$v3~bS0_rnuU}Ir`zg8K^v3$*v)y&4U%OX!`j+1LS@SPHYW-uJyJG9J@F@xMy59|0 ztu=QxSMrt_Jw4A`^(Ot^!s9}3maUh&^YzDRxyaA!Y$ZOYzmh8X@~W0imQ^xuqj6T< z{Vi;=EE{ci&EY;R^~G2`?)^uhFH@UM_rLjg=y2EX(i8eK^FBuDO#gLKbP0 Hl+XkK5+ql; literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/K.png b/resources/builtin/alphanumeric/aleo-white/K.png new file mode 100644 index 0000000000000000000000000000000000000000..05c527b5cb59e51e5852afef3a2576e8ef8ea164 GIT binary patch literal 1353 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopf57InBVtq0pey@JG3UVbiPU%qPCto>*tDdXM>} z{co9nNt*JSwx6yqsrlWprhMtP_qJVnDr-(ZbIvi|#M(sHr&Y z>mTxV9Xs=h8_KUYG8nzP`PP%);h0?LdA12P7H=gPPToyD$8h3@^Zj6c7J>WBEE6st zU>3Lzq_Z9{cD!a}^01p@15}iCoZ&=LsQ^>Znr(|3e8Si{6fS0!vw9R*IxtAeD;&Qp z*O0QhSzy8)UK@r&TL%WsFu8^`U{$A>C)~|i#NmU|334Fo5VHDF_|3)`nr_*-W5yc60cg5bA<>)VdmG$h9;)d1MmEq9S7lw8HY+ z7kOI-&4>L*zM9`*1`0fm02=b1v132GLibd5h1ESw9=B6P9IojsX1KI?kJD+ZvdY$J zTT>-j1lkJO6nr-FIPkbI6pAn&iDwZIQ_oXaH(SRcLibnm5?}t-|0~-qe7%c*E6kI; zkQBO=VPcYWM~JPYL&)z1S!b(^8Z^pRuVU@^G;Pww?EMTAx20^=WL1F(O`LS`dl^Gu zZrFTdrbQ2cS_5S|Ufg6@baHhTw9dLbftU&R3p1k5@r!&GS7DA$wMdDeR11`pW(cquI9X9cJrSv3k4sJ|t zS+lQJ@j+F7ftXpx82AzBsudMLdrr>%I!CnQQzFQqT#(5jdx5U$iUYDrszB}lsm%BY z)HrE3$e^cSE5RzaY@YX-DewzO9_-jdASc`fh5$q*#BpGiBD~j%8+cq+M2W}S2d4c^ zI8|Wl{;c+c*y3$I)z>V(?_YL1eXq5p&+UnJrvlIYV*asliOHe*m0lL!{^G_zGJ8Kv z|0Y>?d)b7q>wI);XR5x)dS#+}JoHa;^y;|Dx_3|1?bPQv#GBH|@9D+C_*HQ`|t* YuphMJ&XqAKegNWny85}Sb4q9e01tXI>;M1& literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/L.png b/resources/builtin/alphanumeric/aleo-white/L.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6af32ef920e1537c8408cdf6220ba59d255763 GIT binary patch literal 688 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfk=pb12QhV!eB&A!s4(8QtC0VIG7g$@OdB4NiDk9>C>vVQ%Tx9w21 z^zw?WnL2xRZ#?@^%lr2Nxsq(@X%(G`(Yrq_l*oSlyyBA47U}4K?~e~^eZKfA;+FvA$$EDY}GflJ*Hzk97*Z6Ji|AfD)1{l`RTQI!#Zwgqm!8 z1RPf>G~IC#aBTaQ_E)-zqlnp&r*sGj@V@Mw8cO2N60y$X?Y zfD$KVno^3|6jp{fei8s`Wf4RWEI=L$QE>@U)Uf`Xv)97-bwLgwo~Nsy%Q~loCIH^- B?ZN;6 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/M.png b/resources/builtin/alphanumeric/aleo-white/M.png new file mode 100644 index 0000000000000000000000000000000000000000..9422d110e2aeef0ce2a97a458f6fa1ee1232145a GIT binary patch literal 1766 zcmb7Fc~BEq91cftBP3al5>NxXsMyM(L4+Yz2%CtB3d$h?xkM48h=34BG6I?`Nj$JY z#RF6hFM2?QvJIH3^*@v1OYkEHIv?)=_+^S$r4zwdqT?U79( zYl(B`&BftxL=Kx3hQpc2j4xn@%_tJv4Om#QX+y*sEYAMVrYIT_V#}9u;;SSPoG8L6Q9TfxOa2BB)R$#;dlZpE#CK%KNGL-tTzQKB5)lTpyE{ql5yh#dL zXsR*2KixEtsm!jrXhU?F5cJPFaktk=$=A?%+4)KS!Q*!bc&`GXuBZOJy|g?Luq<6H*4R(k@SvdulB$-1$A!sj zFVpUgdaG;)GW|4B&b&>{dxIC0k%(s#`&Re7OG-P|cl52`uzN|#%NO_e-%Hsw`@$<| z|LYuTF@rsRg8-wc3D4%Et?FLW!(jaMZUoQ`^_LUShdC=@^wwJpkTjNZm;p2@i$Nr; zOuPsft0H+Y*&F!|E@;+DhiFG+-MP=$GMbSQm^Q+?R|Es_XeWIrdh2vN>?2nwr%Kc{ z3GS_{xss4CG0PL&S-B@(TrXC4Q!Huv(kiCgnS@pGgfNmVk&Mc{j}=V=*}h(Daw*$_&2Xz6goD4Vp=V^tVU}M2j)-56?wB zh4Qm2Dr>?p2DLe&=L{1?*5Ug*$Z)~9`s|=sCZtdPN$Q4K;K|MWO6*&|dkWl6$>5p7 z&pj@(B_7W840b4Wu+d^HjlmYtV;@kQP`f_eU>O0{vzjuLGZ<+I{(}4&+H)IIpg}+_ zZpQLulD}LvKr>Vzd*^0tc?|}R^}e!cR;{N34GI#|-I;|*4@F5DMxi(y5~9^bX39Kq z@Xqn{J3kX(79(78lxYhzq|aQcUCE{#lAX#MkQ*Q>Vh$heAGH%r`a=3x|JL*bTSSVE zsEBQtV6lzg2J|~#v1D|7N?}fkvK)azjnYREzp7mV=1}`E6BKHid=zm#1o$XDg4m6R z^y{cwW}rB8WUstsM#aV>=61DRa?B#;ll+%8o*qExo}404mdQW*lHjX|t5W^MZ)wc~ z@xP3kyFMp{Z`3RtV#lwXXUsiCfA~3&j-H+yde=u0TfhNAl~uo-sv_W_EBmOfPu-mm zZ+^X-#h58r;b>UgW~@Gf|1peg+<*$_<1ev&9ai_1k7KGCOaoz0LZzLpaIM-;`8_+ohd;8gZp$U;^kBX@M{yiOK9zHZ~_r6pXVRYvma{FR5*nhe+j45YkRmecD%Zdf>VQ!TsYuqCuRiu5`sMdvMJ>~s3=`3b*h3>9nCxo0kutV9 z)3HS5i=M8_AkbdrGo)3dUM%`EH#!L{zl{g~BmYs!bBExVn<@OY&jdus1$1y`=+cslP)!dHo_l5zD?p0nS z5K8Nx?G2QQWlPhtVOFPIiVrEg8^^*c&W==a5le=deNi_=-6qFh`*Oo+O9n z_JD2YD+8|O=e4@2HwyE*j;uK|@a7(`v+*Luo>TX91+h!tm%l#B$q+5dOBJt|w!b-S zvFL3d%U=@xbh5*@_~U|IndimL^OfvD`Qqtj3hh#R;!b?-=`^ioIV*B`_$nJWsrTGV zb3XYkiPSYQ0rH0eq+|BUWiuP>x)%q|#00cE^6>e9wF^rM!U$^Yutl-}_^bW~e}nW^ W&w~f~LPdA{K;&IvO!z za7r<#rG*3=G$4@>3tGnqOwl0a6(R(k3Wy?z)Dnlmgx>W}|JpNi=bn4+Ip6)xckk}$ z$cPXZXHRDcf?R|GJ_bP~B{AkuK*Si|;s6s887|re=Gp&g#**g+pp0<@i`WIZa$h_w z$oSHt6EJTnqstHMv93ykAgA?0{$^1YY3y!3$b|5p?OJy&nQ%YB_Q~EP2c+(Gx&L;y z|BrkAStE|x4U|QRfekhjH@2%#jhlO0XMVC>YyXp7e!@{`EgVjJAKF^zBp8m{Jd;x* zOg$%RkE(j84*i-r9ulqE)4B}C)-EM67NnzUu?|Rbv20Kp9f+D+i|S`3ao5~>tB{db{{==0nr~g;7NfmMUl=+&)@hfN5I=Z4qKe*tYCJTKa2}a9404LOsgI(E;-x}DI$Nv2g zZpCyP5pserb8S}u8EZWEeRs+iuq47P23f!vl$VTfW zEsp|W&BZlDt%VbWaA7erxK#PvW%DSu2^LBv)S;&)3#ozwb`lV9Qw9~dEme9EE@)GP zeT%9kEp;^Y5w;K@T9oA;%ZU0>{D-s@wRbZm!A}Qp)iDHC15-mpyruy_ooYRVHHuD+ z0j}aZvVIn9Qjp<$$lzk4+(6??B}-Varpb&U%i!sOHBP*IxDyC$4gSdcKZ5ShUlzEImg2|H~OmpOxemfK7RZ>90Y!;RO zdZ$i0Uv4(}hY(!i3Mi~8sj-fBLbVg(ACoAEey&nj9Hfc|?SXIopFZ5e%1|D_#)(rKp;qDD2c8;=}i9%NS^=WXLMZ}Sa;5o_W>er z!9cIL(R-w;@t5ri&;&VQ#Eq`Qpc5*FGQ8K5emBGbb(DLMP9L}A-r#ah?Qx9fp0zs8 zH2xEFrCD#7y7}(zHytxi^gZw9lhcVWuhyK?(6zt)O`bdI(C$cVVO3&0_vR*s(i(T) zUgTvnRrplEB_-0JudW{x<;|LY{j9UihECl`3Pyvo)q7i2#XcuZ3Va>{i&Ht^Mc_k? z0WhZVr0c4{vpT*6>KM&|_~Ao~pyJWW8tak1n7Z@4PD$;-bu+!cp%=zi*zfTC=^uY` ff9IuAcYm@$(x`&sM$6oTM6GaJ1ixm>zJh-N=|P#h literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/O.png b/resources/builtin/alphanumeric/aleo-white/O.png new file mode 100644 index 0000000000000000000000000000000000000000..e7266a7d0f074a360763ae500d5b3e8556d3107b GIT binary patch literal 1756 zcmb7E`#%$k16@q!+0e~<&D)i65g}UB#+JwCQM;76v|93NSu8|Mmx-Bg*CS%`DDU-E z<9e-2x4z4jn`s^)&pfs;LhKfIeeOSSzvuHgpL0IvbIz}aj`Q(QQPfcc001f&G|~?M z*vI@vkgPOm4Sl&Q6+4_)07|NR|0i1WXVRoIHHx2)Kfqc4Vl1n%bABWZ&BUu7=`}E` zfB^veJupZ_0G06ZHyafI03`c3HD#a^1f33#m6tC64Qd)c(Lz_F3-2EbH3ukVBWzip zQ#hqQDMZqHQ{xEvdclq8pGcq6p|32rqLmW8zL?S1K%)Z|Q*Ia+Gn)Wxh#c%N9d3}g zxS>B)mTq(4gCt+34a8!$DA}bF(y^YL0lD%hnzf%^DUd79e_4A`#%f()Y?%opFVdyV z1t$LQe&mJ%s3*ihuS;osN-hq&dMi#$OI?Lo=4LF0%cv4Cwp}tO*21a>{HM|jJ|*{?xLe7d6*V-8w= z4Wk!(#!5J9^Gq>ng2wiF=~RX(ZQ^VEi8dPS6eG)z+>Wh2t z61_(roZ#+MCwcskJaX@&YC?SJfnQ2Soz7POl{wnex|Afr^*M+F7ogT96UelFY}o9= zVhYT{)sNXwcKwY6;gWr#S{Rf|C05Qh)NzW!-Qzb;MYX{rSA@RH+BFmNNxp9n6?PNv z2{s^OeWvnUpP26ly;ZTzGuQ{OP7Nd0yzB#&=Wv~5_vGF%L46a-4Von)#IRK`l#bV7 zMinD8_Q@Y|M)H=?pW0Fy|U7oK0xp);C&AAb%G&RuM>Tlgr%4VKw6}w26|&JG}|; z(XPK-BP^4;rdx5G@b27mdOuWZJ@I=!@924O=*Jfu^&LmvQ|R?$rq=9e;?D6q9WAgf z=05MSRk&$X`?T|&t|kQgO#)S;yNGgof969Izra^%0;k?Fdl(b#PEGFrJ_wrMVE!e5 zKS)!yeZCf3QXsnP#MIAYsk1L+z2Ng0ea9fFMVy*X z&e_Yd$9Yw6g2o^#+4^%C)XyxV9}e-VX3oDe#wTAiN>oj*o|N1`6LA_`_FG{O+p)Q3 z-8gS--JIxu-}o9H!snS<-$kyxqS*y<);#@|bcM#br61qzaH76Gy5(WiQ7n$A9^eE` zD|i$*m7z$WfZQ}Ba*3K~t?{ZQI zMz5QAl-rY3uB^*$J(i$&UmTW7NNxFa`uPAbvO*+MOq#Pd9z0jBXpPh9Qh3)rS)jKh zeYM&RgR7HwkZzS4V0xJ&nBMGIuF2)skY;bSsBqC_iriJy_S2{K?aFh83w$xfiDx-pa1{> literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/P.png b/resources/builtin/alphanumeric/aleo-white/P.png new file mode 100644 index 0000000000000000000000000000000000000000..e94a48a4cc915cc291232cd991fcf4954207a710 GIT binary patch literal 1106 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfdp%toLn;{G-c2l9agnr?2+Ozq zw~o)gA86cp@YKxe?H}d_T%7g_Xb@50!Q>aGv`atwPWhGf*If?k{l15vS{;AM zQkj#HES|~n>G+12X9~U(?0-dzt8f)Xcumkav2Z_IXOm2rXArC98dVRGCk8o=%M?np z92Y6H*Y)*pyt;kHx{ro!zvR4YI@Ya!f3f_d;<{>IGY^g2_}4F&xx3ytX6AFU>%!D+ z>vwitcqRM#!-=d-^JSMDHICL?`!{r!U7X8=UYG=xl&T5%cy{vtjLi?s`$Cv3@7vnLM{_5E1V}hdhP1C&qIJkFy*wU%Y+xjtb!?Lfs9|- zO&m=MO=osCaRe2~uHr5_{WW*J!t@wN7Re&nhg?Cytb$9P{F0oY@OJy2O^>H{t9pFB zeeVIUqu$PK`dmg!qxNZ>FuneY!SPy%K2Wpo*2=&Md8^9rHeGIx$yz3Ui$!x~*-@@b zzAMA#a$LIZ({0KU8MO9?@RJu4GnQ~~S`sC!ePUAP#7zo!=Ve~qp-?32%2@_m^y%&u0`r{od8p`FxkA{=a)G zH6qsUPnPcW)QekUY%{9NyRlBmw@~>-A@83vda99 z%fu=`Wdk?PW{VIL!!O>^Gbc;VkEv@tBWD#@` ra0C%7f-H_KjuWm6u@IHZz>5Ac+x_g?s(U5v0Ep}9>gTe~DWM4fT`bw_ literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/Q.png b/resources/builtin/alphanumeric/aleo-white/Q.png new file mode 100644 index 0000000000000000000000000000000000000000..8217bfef593193a446963a254b95b7b5b048e4bf GIT binary patch literal 1862 zcmb7_dpHvcAICQ~=5EOSI+qcPQ;TvBV;@qenLgq_91po#7-9)J~7@!5p#7BWs>Wh@k(MGN-U+Xnyy z9%1Y*c@hKG`>VtN00=(={OZRK0_Fl>YK4!7{%_rHpOCoOlj?l+UpZ9(gH2}8`tie^ zldjbUy&LD^t^G|Gg`ck#L!}1Jgzf$+dSoKU`BYxz)4wM}97oYa(oW4Lfzor$j_ntL zwbJ%h#h+<1;iH>^FHVAV7}~>XBJU^p`@fZ_6^W)n9NF-9g{sm<6xzyBHd->bg6AW& zs~L0NWdpFW_o}g~tKYMdWsoR1dm~V$*^g)*K&S#V1Ai)kjiY?O10Sv>pIAJ3*C1fn3Q02?xs5um_i$M z2o8q!GKSFwG^m(S761T{}AKC{S?P%09*7+TfprO2HlQ`6ydp zCwn~4V>A+@=jX5-{P%raOfmTH^dG`pV&yRE|c`DxU!c!#TlP~woWwqGCVc#;Y zhJJ;Plk!dkJDe?LZ2b*i<+dtF7tyBT%ah=SjfOPxK*{!9bJ z{j71ry5VPeETEn{vm9zMa@2t06lCe7oluhowR6&)O2I9a6NGU;6oO_}_QD|YSd?y4 z^iDPP-+jq(kEbDP#k5wF2(N9HlgqyRn&eEaG1&Q5x68WcLSD$VHsR_N2n{6O-L#Tc z%5m~$Ve@;~hw2#i_C;OQZDYzy<)-8UZEk?SN7t%FXu*v5)8A5Ra~h{%?3~IsHA4Cg zXt!{Y=_diQ6jM6G5!=unBSi7BE1JCIO)>pT$aKyIzI#BPC{v9ZRed8wtJQ->r-m3}AYbIc zvqp#J8vT$e)L>MaP#E;!fT~`L9d6oYKGbvfwL9(Y?jt52D;3KU7*d@%AtS_|TlREHs?{n5*Zrn((lG_LOgo6)3$JYcXf$?^ zaC((xr(!u6;5;?plwzkC*haVg6lL!U#?Vnk9;mZ{=jb_jJ(}fX7d8%uIyD)YgIuk^ z6f$STH3}oOoliS`VMY(}U#%_`(8mun(w$@&;pgqatIZ#$9DIj1dl0g!P?PHX*?yIq zPu>&b6)^MhMV5lxv6~ACx%%|N-{&c^G2FWr5yhQw#JDEeCEf={?J}NhxbO|rwDq0- zZo+@`%%~wb-<}^Nxq*0OQ%o$T{?PF=AM6P+Y1AKM3729=1I*_3PNE;c=Gu&Di?)>EvtdJ9q~O zbtA6#tyKiY%v8xh>+DtI6x?P>U#XxJ{*K}TZm0jqM-?5iK5wGf_O*Vza4EBA`pWjc z>8YsejpOFp5?WjC!CSplwWN*UrQSoX!uGoK?L!F$>CQ+ZFsbrkOrlUehs0dwUmx}O z3gT$&Bk|Q5x)gXrqDTllDg(SDSqdrEHGmo=z<$vZhQ%u_2m z%$k?XUwx17mOF*Myzz8#e+h~w+X$d4G|LJowWc`IyW_B_m3EvEM^M(bz zeCP-wRUj3vz@y$m<~DeZGExDF4@Qj8wD`~vN02iB{%ro6luOG!>!WWFU;I44pj_-)ZGy7?0|n_)KL7v# literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/R.png b/resources/builtin/alphanumeric/aleo-white/R.png new file mode 100644 index 0000000000000000000000000000000000000000..3cf3892f3e22df72f543a69ed1b14a73e99943bd GIT binary patch literal 1390 zcmb7EYfw{H5I#2~B!Z-gXk(Dam5CY^q=FSeq!$Pf9s&snf;7c8u|eChRhfp2$Q3Lm z1@X#D8*$VWMH+(@BFM8^5F_ywF(L?}fC$mz0|JzX^ro%jfw-UjpH^Min}O5ld-xI2U|_e}`yq8@ zy+dmpCdxR;UAV5j3IJk92*)o*B6xXaKaK=Vr>3HNl8Bdx=Hx@{>sPn)9%VtWjCyfi z*Q@l-{=-fexw@ZDg`AnPy1=Rn0?e$>6uptwzlW6>3qfk|>a0%}coDVnxlhHrC|G6k z&l{qE*P`kb2Z7h|@NhhQ?wkp{bX)QR&|+6d7FztHb17iHb;0Y|8yV1-ql-_k*?acP zppLzdE1XU^(E4uikwlXyCgA2a=li*?weqMF)q~42LZ^c{o1mF{6DTq_(U? zla;nNh-Lg7+7{RPM(w~E2)TRO3U{q$x7ziG-^O6|UKlqJ;DlZ{OH-hhb?aYin2dDlS=Bi^tY84e6GQE9G%^aqfB&~$>t)y4M2qio5{ zNs??;RZGB(g>c{8in4T6{C4sg4g16=+=+s z^5SD7gbo)3)U@B81R`c65o7>r_HC>f?mIlmRsp#)0(jpQ_b?eVe#d(9 zed%zA5wm~|JJQHP(LzD*3kKu#uDGta| zRUHK-s$N8+ELG_=#IGM_5Zn{e5D@R<*ln#Hdg}2N#4q<*n?l9h1(JScBgDTGqEEU; zV6EFQI}fuvB#48!bAsIVKqUu!5`9v96(R z6?%TiZ}&v^Sl97RWg&UzsGxs7>=y*(eZ(Yb9}548=c)D*goY&_oVk~Pt5GV%q5Pro~cv#SKc=%vb7iR^pItk z58P;L1uGiNT`t1AoQPnf=cuslyko*7!GSwIoxr16T_FKUKV!- zthiUVwBWMZ-p1Q?EO{cfui|Xn(t_h>7Y_V7TU)!T@3rvz^_^k1tqsz)*$%~2V_?dF ztNQ4-O?PyrossP6`bSxD3V|YOIQu0lvdA2)l%}KX`UUpb^K1c(7JP#bGS!WSXj1nB zrQVu|Db)BNza~JOYz74utp-rPRBS2Cb=zd(iyoKmz`pqN3S@&XqCeoN(yHrZop~#M Zm_3nK1#U_!()yU;A%PK`a{r`^zX1WxR#E@} literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/S.png b/resources/builtin/alphanumeric/aleo-white/S.png new file mode 100644 index 0000000000000000000000000000000000000000..4c08cf5982603e584967c164fbee4ac2053f2546 GIT binary patch literal 1487 zcmbW1`!|#c9L5Llm_Zm!X4&X%+;17TjcLhi2r*Mjk*2bPNiI`zN!eKQrd-A{ZtI$M z$|d7gF)q>UP%fk0NfymcDydkca0Vrp)j9hQY|lC0^PKZJ=Xrj4&iSSvqPQz7YAYfT z2xU(XS04mIhW+Kxa$BU8*1NG~Hix_qyKVXA|5R(i1iTefi}j)SB8X->G3@$*$)hQJN{n7{n7pbUm1``RI(OBM&Hhu`(0L*=A3|WFohE zzEa7bzqJg6$0u^{Zlu~VtcXUfOiSuWVYq}9VXc)_IfGi%oI1j!a!=lV-}lk@bm-{p z=sKG@7&JnO+gqCHnw3-oOkdTTwI4IO?=sZ&D=8|VhIldyYH)rQo28EvgxX<&&?6)$ zimR;%yD^ZQ)Ot{Q8w*rR6kSxkpz+#D@bpe;|8#r-*rcCGA}>TO#)}Ht>H#hD887O> zV$r@JE}+#jtJH3L(PGC>_;n}OWrk$Mjfys4My2r#)&J42E zES!smC8qFNbDG9j*pj(`B$$ zm(~bw%_W~h-h9LDL}@8Cgcrum-&CTFP*{067@ogw39vh&(bif)($JDCFq&%tv{3G& zCwcwO_Mh`AK)Ei4q^8_j-9;z~&ABta!Z(b_>xwexRi_ocii#aGD!@0DpP0-T47u-D zA=F3H?Uqlu@7=RLY-qzt{C?h4mMUjyNwAwg_Eu&7?7og0W3qF9tY&EgRY^604>fav zcGUyCI2LHWdO)M7WZz++YEqTnt|bbejnUz6WIL&t+|97ShROQYCaJXVJWsV$Yp$yj z9T(8vc>$g~)x`JQ$}Y*>tp~+ROkcjt3vnB6#1ErSg)j_cSC|=kYzks;oI2MFN5!rL znV}(R^Y#=_xV7d#YaqqR8FO}vWp$y_&Knwelx!EvR6Axs93*EPH8ig_qIQf90cqEG2^in~6>G!!sU~+xAkW5Z8>JN*+n?Tkbr%qVU zdfh83Y4KqDku6T^_4kfyX2@BUw~;a1MSdt>Jy7QB9`e7hM8{ zkF;Lc8`B0UYlHD`D%(=6j(firag+Is=M%5swO#hO;DO+SF-%e4MfYWR7$jgT5-w_F zE+ya5C5*}usT;RYnZLwyVk~4y(2NNItB?GI9pL5-It_F3U`+YkQK2U;CAaRa z;7%h^FhR#Q2OpFKTae{1v#5N(;1z3B3Cn9pb+{fV-qzLQNKZ7FtHzC0JK$cI`*2tN l9V!jV8x+3so&6X4_&l5TgOe>URXN}b@pPlOHn{u<{|nZ(iq8N5 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/T.png b/resources/builtin/alphanumeric/aleo-white/T.png new file mode 100644 index 0000000000000000000000000000000000000000..6484a2856feeb54b2fe5e286f82833bfd23f04fd GIT binary patch literal 719 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfhtA5N`)#VhbX}7fZd}bH#q({lG9!NL}xCpQavN*Ch z3OEWtDTqkMVx6mY>%z9&mP`f8u`$P-Jq{nx& z98YcPUbJI{K8xmS^XL1Urfl7v=6Fux(cfu6ro~=`NxA{{T;#E&o|$#tWN)!J5*5#2MGx#JFR;%2c*g81i0kR<=d#Wzp$Py-xCjCO literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/U.png b/resources/builtin/alphanumeric/aleo-white/U.png new file mode 100644 index 0000000000000000000000000000000000000000..af3427b45558f63306c1e2d44aaff02942a4a319 GIT binary patch literal 1212 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfEvA%KGXeIJ&v}L|Jon*wD{MLWoJUnH`;~y{@jq+cl>Oy-J11}q@$mep0dt; zTea#@?a9$eJ9oLj$ZW`Ay>!&I~GU+ZSBzTs_ao?QPi zfBxfiEw#*~{Il6%I~1BYlsbkUVRYP<^5lgwBx(@#qLezhr~S649H&`f+-v^z1F^UnAh15`C}k*3-xdirs$s_1bTmRqy}( ztaE$m={~*gHgkTDYmPkmauZW`|M(v9X>arrPyaQikJUV1SbA^WorsV~vwg*>z8|@N z)!cvmYfgARN1M*;>E*d!?lisLA5`|fDj`*P|H6~zu~Exwel-{#Od&=MVNOZ_>^Gq3m1my5q^0E~V2Y?j^rsyG5#|u(xRGzj|HaSG%)9{=dU?@!YG$ zd$;dd(Zy7~_r;duzukX6Nj;~%>*>X7v0_urtzzRgp6#D{?^Bm0m(7-S8RrYv7tg-F z=3x7(J$ZZdPgb6p^xE8X`JRIj$Jf3xTz~tOM&g<1Er*4!>pIWgF42^|{_^$G@L4*} z)3--9SBq8O+`?B{vqbKiX1*z#_|@opi{H*lTUTdp?t49LX6wHCiAJ`4`iqW#bp2wn zuS4#*xaAJ^uT!dDzk7M`(zAWn9@u5S%aCrWJ{$cmbyf54xwr2e-^IdjnftSB_9E$wvp%jXY1tGsLn5;NmwH7A}*?+M)_@%7g8u2JYS5YN-q&t;ucLK6UOi5++V literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/V.png b/resources/builtin/alphanumeric/aleo-white/V.png new file mode 100644 index 0000000000000000000000000000000000000000..948d35a67479727cc33b36a3a9966a4e6b086696 GIT binary patch literal 1439 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 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/X.png b/resources/builtin/alphanumeric/aleo-white/X.png new file mode 100644 index 0000000000000000000000000000000000000000..aed5084b77993566fec80ad10955d5e5252d945c GIT binary patch literal 1545 zcmb71h=$a@TPd#Z)X0 z$^U3D>a-2`RKGk~8`i!t+{L4(ZmbJK!@eChuh8XdG=CuThVOO=^#{&qL^_{+N-4i| zy2h3;*65iN+_mXI>ye-YMDS1gRO_XF(&jC4|AQ}a&7-TkcW5vBMoSly&@bwb6CJ{n zod5y^UavN^sCew1P&4Wqh;;~i8$aXv)Rs8dU2<7rZd?mt$`<>EU&El))AFtUC%O(? z zhaL;L*AipGD74G;C~%;ytnSf_8e(!e-U+N9UGEL%z8iz_x{>3Xic*MTNjA*9Z>rLU zgvc_^T|UfJVXndwEQPM(z_P0x?^|l#5w_2wBYdK)X>>*%WU%mD?UVXq-z<*pO#dDHuyrctn<@ z^WpsB3bx9yWq~!VB0 z`R5~iVHtUXNp1JsHqhJ2l~OrX~qO$zOa{%c{P!S4U{_s3Xxe%9st2n)vrmfZ~ug1d|hW^C?cFt~ahB8O6F3mf8=+$UAqd zL!|v@tLQ7P-LPN!tcFZ8k;Tm79QA^l%Z-zy&t_jn+vkI#6g3`bCkh2G0$EmA(26zg z0TG1RJA*@>gpOYf=b$|)Jep=*Z~nsL2ngw_DL58Sq`HD)fjyIh7FsA9xDA%#HIot$ zkW;J7{bgAwmRfam%LI&J!+dc7#t0#QmWeoMdhP=#rU-4O6zx)qB+BQMekHHT2IP$% z4;BI>_CUg@1_+S!t%qO?1J1RA9Q@%h@aBtw4CQEKgOUYjdU4lXR!kJ4M?Z)XlO5Pu zgPRpii&{+MUndGzPKW42`Te2ehOr#97ez1t2mkgB=8;f|Ikd`Bd}g!h&%aysrA5mN zPu*^9KU<3mu=DpJ9d1jM`Ry9;lGLJ}J;(cfcs~+)YNkD&G^|G=Cr=-QFAqGHq2sA? z=$*LQiMfS0&lwrNmRvtu8uAYIwr MN$_;3!Lzu31Cmd+n*aa+ literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/Y.png b/resources/builtin/alphanumeric/aleo-white/Y.png new file mode 100644 index 0000000000000000000000000000000000000000..80475739e4b4464faa875fc4003814e680466e21 GIT binary patch literal 1248 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6d{hvgzed?nopfTNR$-bq0XUx#{caJ9|w! zQyCEvLyp|$MA*OzVcH?q8o-t|p$-KM`f{M{S8 z(|u>WTDss}(xOs}#$UHCB=6dJ@uj}4%a`r^qBGa6S;f^mFLZsqT!iqYx$7Fs%tC6M z3d_C(rfyZc^7?SbiXT0%Vode<*K%e)H(tH!(?(Op`Nn(KU6c=zk#AVTzm8M#*kXQ> z+_>I#*Jr0+Z#i?kEokY&N7bhf{|k6&@=#32ozHjf!bh|B{woO;HIL4k zQ1#xi%pk;P(Vg9^v@WgT%={)h*Qw=b5@+12@2(Q#Izmf08o z|6RY|IK(IO*Jq)b!s|J|{`#i+$#b{blHZSoH2>UhKGJnIeWKmhSrZaJ3tY|kQZudn zs@u^sjZgGhd!>1U*)HuDxzcL2+;m}Fe3kRjJ=5CHT4y`0I zvY!45!0ZJWc;TE^6^Hh$$=xBF zE9fu%+u>J!%vaepn!Fz;nNE0jTBY{n5|~9N@|YYIfQXZ$W!s(TS4kQUHx3vIVCg!0Pf2)8UO$Q literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/aleo-white/Z.png b/resources/builtin/alphanumeric/aleo-white/Z.png new file mode 100644 index 0000000000000000000000000000000000000000..f58fc9eb5590073fef7dbc4dcb11504f0f1adb77 GIT binary patch literal 995 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 literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/0d.png b/resources/builtin/alphanumeric/lato-dark/0.png similarity index 100% rename from resources/builtin/alphanumeric/0d.png rename to resources/builtin/alphanumeric/lato-dark/0.png diff --git a/resources/builtin/alphanumeric/1d.png b/resources/builtin/alphanumeric/lato-dark/1.png similarity index 100% rename from resources/builtin/alphanumeric/1d.png rename to resources/builtin/alphanumeric/lato-dark/1.png diff --git a/resources/builtin/alphanumeric/2d.png b/resources/builtin/alphanumeric/lato-dark/2.png similarity index 100% rename from resources/builtin/alphanumeric/2d.png rename to resources/builtin/alphanumeric/lato-dark/2.png diff --git a/resources/builtin/alphanumeric/3d.png b/resources/builtin/alphanumeric/lato-dark/3.png similarity index 100% rename from resources/builtin/alphanumeric/3d.png rename to resources/builtin/alphanumeric/lato-dark/3.png diff --git a/resources/builtin/alphanumeric/4d.png b/resources/builtin/alphanumeric/lato-dark/4.png similarity index 100% rename from resources/builtin/alphanumeric/4d.png rename to resources/builtin/alphanumeric/lato-dark/4.png diff --git a/resources/builtin/alphanumeric/5d.png b/resources/builtin/alphanumeric/lato-dark/5.png similarity index 100% rename from resources/builtin/alphanumeric/5d.png rename to resources/builtin/alphanumeric/lato-dark/5.png diff --git a/resources/builtin/alphanumeric/6d.png b/resources/builtin/alphanumeric/lato-dark/6.png similarity index 100% rename from resources/builtin/alphanumeric/6d.png rename to resources/builtin/alphanumeric/lato-dark/6.png diff --git a/resources/builtin/alphanumeric/7d.png b/resources/builtin/alphanumeric/lato-dark/7.png similarity index 100% rename from resources/builtin/alphanumeric/7d.png rename to resources/builtin/alphanumeric/lato-dark/7.png diff --git a/resources/builtin/alphanumeric/8d.png b/resources/builtin/alphanumeric/lato-dark/8.png similarity index 100% rename from resources/builtin/alphanumeric/8d.png rename to resources/builtin/alphanumeric/lato-dark/8.png diff --git a/resources/builtin/alphanumeric/9d.png b/resources/builtin/alphanumeric/lato-dark/9.png similarity index 100% rename from resources/builtin/alphanumeric/9d.png rename to resources/builtin/alphanumeric/lato-dark/9.png diff --git a/resources/builtin/alphanumeric/Ad.png b/resources/builtin/alphanumeric/lato-dark/A.png similarity index 82% rename from resources/builtin/alphanumeric/Ad.png rename to resources/builtin/alphanumeric/lato-dark/A.png index 72c0102db9812f12402e70d35f5ca04785abe477..96ec17c25a67130917682bdfb34701e9df1d20e6 100644 GIT binary patch delta 193 zcmV;y06zbM41o-gfFW#2L_t(|0qoU@X#_D006?AY+dt{Q+TaS}1#AS&G%*2@F)4pg z&LjW#j9GYPhj%c`CwqK@IhHkhY{49R_Bo;qr8j3Vt@L88D_!e#tl8@mbtt`AVmPks z_YW!g8SFX=13@rgY_K7a|NpZ}0jLBJ@ST;P00000NkvXXu0mjf*LYfT delta 195 zcmV;!06hPJ41x@hfFo^5L_t(|0qoVeaRV_706++O@3s4{*2BQDcmX*GcAMCs9FZ|8 zf8dti-D4IW+2I+p@X8+VV2;m{J=S23E&J?IhSHlO=2Ck7)|EcLb(ZY)iaM0ud}27x z?DrF+v1g<8GVXcBZxo>PlC3MfS+qXbn%8VmhSHl`jKq;wJz^l9*=W6rcmAv2y3*^n xuJq;%>XiP+&Kc}F3IjnfU~I4=>1G8O7wB9QV70F$dLFu7x$1 zX*(r~${JFLoeQG|Myhn43w~1BTan zbma_Qe}u$%o{RdLsMhiJt^4+1{7R8Y$S1aC#O8v*r?`&+tTX%?&Rq%P)wsXcCowur!t|dYyLl$bQ6?0yyNP9#@SOs!=25e3fl^vcbS8GRt;*i3u{p(XiE^CM%32H) zN&>8>Rr1*zZaty+U|`~16dcW4;lSeCSWCFl4h?+WtbLZn_@Q>a1y8IdT!(uiwQz~b z`Ra$GE&cG#2QAE>rp1`Wu#$mjpI^lC2HtXQ1h!u_NAS<43!#Tnyb6O9ZPI+~Bb zI@KQw(;1WJ=Pwtjk**Kj^EebrrVg5>&)5%S)3KL}#0^&kait<#pr9h=3nG1aF;2|9 z^e&Gp;0(Q+NS>&3;BK8Tat{2R^+H%1??uoqJ*jt%^XTLnmu>Lg<6?8{O4(%2SA1P{ z%EqWiLj1YURRkxnOV?aaes%YLhTknT@xi2;-Nni>qgKFXXr(-<0zI2hh&Nz-3BPb8 z3%laRcfpIC12f)S5O;C@&a^04gxw_eF<+}ZmjdW|+XF1T7S!RWyD<4axC=Q?RdRgQJY2rWD$`FnAU_}Gd zsr;)sZ6rc^;{f>y?QFhkIB$R%Cc}C?nS0q`20hgRQVt0j_toCeZsH>@?vLVppzwDp?x&8;I7lmz zoNdHgh-<=~vovt43{DLj?t`5EH3rPw_JaqquHat42#sD=;_qZ7?=@KVR{U}?BWi~( z>Bpz-{?ZVsY~Cn;Yklo2n`%|&F(xLb2#Oy^o9!-w7fX^cl=q2_d7ET;0ZS(Qp-vUl z)W@Vi*VEf4EHwSY3pmY*(j~iwj+pc0xv_RA7-xFI@@~y$Z;HINV9~2V;!Im_@)YRr z%P>C}VU!ohO!gF9uZ}a>bh9c{&BrGpqSLxMgxwf4b>pP(Ds1wRwY$@)EzDy|boo9v z95Xs%r{+r$yFY3^GB2j&-r%YcZ@panYHhqTS3Xq?1^`fy(Wigj?AF-^!4>TdobsBG dM=F0`nI(V+xydNOU3J>GJPzxFsdWuX`VW~+b}9e> literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/lato-dark/D.png b/resources/builtin/alphanumeric/lato-dark/D.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a4db9da76e1c463b8c23a5c1c041c2dd9bf786 GIT binary patch literal 1219 zcmb7D`%@EV6#c$sLn6<`YS2zBpMZ!q1yo|hiY_IXAR3+U7@iSoph~n>5sXyI4u}L4 zT~tJhj*i3us=$bZ;)4PKWRaqR3N?x<RXgMZ-+xpT@dqfNh{mq5uHWv&pkym0#oTeqd?Uw#^{{EdSpq;cRSYJq`yH@?hXrl$MmZ#mnk5 zI(F@%F#n@F8+2I!;2wbzzYvXbq;UmgM-6DIbam_caPB9cdO6bPSFKyVfYaaX>6{Th zmagB+yi7h|%Bvk)sQSL&I_MIin0|Kle6ON5B;EntxO29qV=V z+s~t)rZTKrVef-8yT|_>##BA`W9;C{*J2r1;SBM)!#r5geI$c`3+=&jlGgbWj5PaQZK2%C&Fz)?s&Fv9$x4 zASxJHj4{FsLDQE)-{4x^Oj7H>tru2AV0qgkyLv~|t&Ci!HnoEMzx_{zO(akc@dyWDln&4t?eF47N5vU?vo63JCkoW2$A>rCy`uwWVxJ;WqW)gBn5jT)VlQzmm{ z7pAMN>$>8}(QbOa>ro-5Q(8s^!9(lJ6{!Sz(-5$JQbCnzW(uvDG0}V|>3c1F6H{oj&xzZF}LrO!h?V~-~;fcKIGd&E#x!@JmLOFdpo4vw^ID=YVv3M=gw~fl{ z7oi+B7M!dnV~ZT-QGWrL6uo!lzMWQ4-v2S z#Z=*pd+@-)?I!ARNDqHQV)^8EP!VjrR}?i}ch!n0F%n1v-u_`htOF6h$Tn%fs|_2t zI>wzex|M*4l!Y8-SqZp#>NqxdZE^?oj|Oz-9>;WV-p--Vo3q`Upw^L#(ik_gvbw{K z?Afv!RtrKsVD%TbH)ARvaS<-_h$`@>gzBe9fAS$C@83M*GWt<((T1}x&dVIRXq-0{ cyW~^feNCd2_U_wi*f?tl43JAIzlqKG4_e&5*#H0l literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Ed.png b/resources/builtin/alphanumeric/lato-dark/E.png similarity index 100% rename from resources/builtin/alphanumeric/Ed.png rename to resources/builtin/alphanumeric/lato-dark/E.png diff --git a/resources/builtin/alphanumeric/Fd.png b/resources/builtin/alphanumeric/lato-dark/F.png similarity index 100% rename from resources/builtin/alphanumeric/Fd.png rename to resources/builtin/alphanumeric/lato-dark/F.png diff --git a/resources/builtin/alphanumeric/lato-dark/G.png b/resources/builtin/alphanumeric/lato-dark/G.png new file mode 100644 index 0000000000000000000000000000000000000000..54fb8a4659c4eeda2b7574ffcd0c50b6f5a3f1d6 GIT binary patch literal 1480 zcmb7E`&ZHj6bA%FLIri`v2tI{@BwCGQre5Jf{#)HGnG`Le6-YRQ+(osur!*wubWa@ z8lsi?AWc_hYB00$NKH+%mF1eHrfH9@cQiU@e?YtEemyD9zDLzLnbjBMB8e)G zwD<7&mnV{DmjrNZEwMR8%hHMsOBCR2(|`T$FI#n`0|lEv&s9%BsJk zCkx6!&zeG$WZDmxmyJ;QFe>ot%F6i2@^pK!lrz8Jy<*vu^)cXHU&nEgt7qazhmXtw@{i!a&#ZEaAjiKN}e!d7->)k5v_qB5{;cIx0rvci?YB% z%u3!bwt*J+)6B#YVZ&2v?~cuxeLt?87&eFa6O=>pL`Gp#f>1c>Nt4dn0Ez}fv_teZ zP%)d;hCL<^cdKdWd}bQv=dcsmDW3*d{Qd}NhaUWmXn5`12e--359GMSENPrD)zwZq zH?Te;dY2Ghn`ngyzEf$+)q{N}{IxJOIu;yDEk(&l=#R=qF0v+0F@r%E-oqi`NDxPZ zmICMw21rf8L}S4Srn2k^fEN9im3BvSPj*@9Shx*R9~=^dg2QpAw3JQ}5a0`?rezM! zVMM)S>~P%uyg`j7Y|sIPRmMyd0(ceA`6S^eB!#Nv$N7QXYuDcoDF+zbe<$BR)!rGu97aOHb)bIJ_U^nFP6`z_I6)dO&4<-qZ?&Ru&bx zpfA$P*zR^JgtMwX2_Fl0>=l6!N>=o$LBtz2R};Vkdt-f`qm$RWc{G5~RYt{c5+=n> z00d|#=T2=IZtFS>w4*An7nHOLAo$yUZTlbO{w-B;ND=F}!Jci~J!RMxmZiQO``7GA zWXIzyy_{Osin*(sLo4Vs1`{2Xy|!Re+l`DtPKgxmM5(7}Ics1Hg3Rm|9?9Su!Y%ly zL(NYy2yrj?7~yPnV^MwATHmcg&j~@iWRdb};pAQ2KBJOgm=FYD qn*yhG29aL*=yZ-x_lp$lSH3(Gt9K8yg+yBCm;OKolP>q+iT(u<8b|T~ literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Hd.png b/resources/builtin/alphanumeric/lato-dark/H.png similarity index 100% rename from resources/builtin/alphanumeric/Hd.png rename to resources/builtin/alphanumeric/lato-dark/H.png diff --git a/resources/builtin/alphanumeric/lato-dark/I.png b/resources/builtin/alphanumeric/lato-dark/I.png new file mode 100644 index 0000000000000000000000000000000000000000..4455baec89fbfe42ade92b8abee2da27333bb6af GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLOw2%$zZdVt11Zh`pAc6d4FS!`FAo4&%q2m7 z!3=6MH&o|H0l8(KE{-7;x89yLWMp7qVKA8fPcbH_s^q~9E*&O_J`kywvVM|>icqJE h(nNBp8gGPg|0I^@C133+uX_O!^K|udS?83{1OV7-Hc0>g literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Jd.png b/resources/builtin/alphanumeric/lato-dark/J.png similarity index 100% rename from resources/builtin/alphanumeric/Jd.png rename to resources/builtin/alphanumeric/lato-dark/J.png diff --git a/resources/builtin/alphanumeric/Kd.png b/resources/builtin/alphanumeric/lato-dark/K.png similarity index 100% rename from resources/builtin/alphanumeric/Kd.png rename to resources/builtin/alphanumeric/lato-dark/K.png diff --git a/resources/builtin/alphanumeric/Ld.png b/resources/builtin/alphanumeric/lato-dark/L.png similarity index 100% rename from resources/builtin/alphanumeric/Ld.png rename to resources/builtin/alphanumeric/lato-dark/L.png diff --git a/resources/builtin/alphanumeric/lato-dark/M.png b/resources/builtin/alphanumeric/lato-dark/M.png new file mode 100644 index 0000000000000000000000000000000000000000..46e93475788f5753d53e8c790c9e22f60145373d GIT binary patch literal 1594 zcmb7EiBl6-7=OD7Aw-EAqBczgpQ(c>o}ipj*hsKJ3K9f?5fBL!fk8#?(*Pd9hPt2~ zbp~YwR1SsVs4zp3j>T|zP$;00t8%oA6R6ysqOrRf{{Xu)yWiVyzW4inzxVs*<#~I3 zW6I*Q005@$GN}&$2tmC}8kuQ4uF;cWxA(WcZe;wwPpQ#?PI32LMKQ+@%uVln~u7)(Bbp7_Qv2YYPcLKfBfGq#03TEKgNZF7vR7 zI9RgO`dYu%kE<~kb~iAdPqG;MQW7&9@v-wHE4Iw<+`XTIcDl##?^<|E_7=YBEw{jsYKK9NQ!+XzL#L&yKeourZ#LkeV zL?MiuC)0Dfx8hB3wu!NsHaD?--j=fp^XGOdn^>ZD7XZG@^mD_*X34t3nrvW}TT{uD z&HXrx^5ICYXP|wG82J5d)I_F+UD583;^AkBJ(;iTyC_}^o)(3-78D^ zOM0oo1vMLa#fyEvFfMs`JmaWh&-7)4P>4>&s5|unu^X<-yMKz`VYiw?)PJ|Y7HKV* zaJHv#_x^jjkVro6z9~@58?S>E(;t`9mvt5|M!z>| zyVYTnY|-)0n*cm#fVZd%aaIDGgjn?h+dt^YW)b4nJu}H=!e3oasMC^aelU_oQ4t5V z0>#wz;jI|SqwJ(Mvl<6-e(5bLaZXbnxy+|yx2?OhA554q{+j0c^l(2^GV|r#Gqy~) zU*TK75|81Qx2;*)76u|cq3*>k4w2X=)L}_A5)f4^+h$%zl?+_-3g44zN`Z>Pmsu33 zmDU^+znPil_S83VygCSh{eHZL`1t^x_lCx@J>U<;*!6PnDa9(){il%C8Q`VE97b z6s=YQYPX!ph=<850hDb2CkEM8hQ2psazDL2M-V!3S0jp`jxAAmFsV@jCoCo55G`?Uj3mKE1IJO^vK5_OnSWOW06`4 z7T^1nKc$7W_IvpzZ)$!Cm8$$Wi#l*D7YOY%D^_bJ=!o=VVDVtNFQw%t>m3KFGm;BR z9SANROBF61?W&RhYkhTpWf;kzkN13_pGGG~d0B{_Lg=t7I270dx!xaVd~HtS8v{ zwF|~bIJdF{P`o3ujG6GtE`kk}tKALFa=h0WQMOL7`^d?PJB)+WRK?FG?P%|Dp#(vs zOp#>+8&!?)a!G()oWVefh>Syuq2@G^WZSpaGl4X+d+|4N_@6a8bG26$2uC`1tswad zX?V)K{`~14a*-C%y>Y;ru^52&*iMrmcVtl;+}*sS)%!zp{sS6bK=J?p literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/N.png b/resources/builtin/alphanumeric/lato-dark/N.png similarity index 71% rename from resources/builtin/alphanumeric/N.png rename to resources/builtin/alphanumeric/lato-dark/N.png index 06286a8c3fb2e766c069e93a0719b94aa6ba13c5..e8cffda3554d60440a31e00ea21b8d821ef63f13 100644 GIT binary patch delta 50 zcmV-20L}mS2>1w)ERnP%k-!WgqXkCE0000HbW%=J04AA+YC27Q9gr{zU_(|DbN~7u I4zYdv1J7|1J^%m! delta 92 zcmeyt@q=T6PT+qM!S<<-niv=u1WSVaf*BnCKiH7aaKYe1fWU%+2?_@s=6-s=vGzAJ E0KelzZvX%Q diff --git a/resources/builtin/alphanumeric/Od.png b/resources/builtin/alphanumeric/lato-dark/O.png similarity index 100% rename from resources/builtin/alphanumeric/Od.png rename to resources/builtin/alphanumeric/lato-dark/O.png diff --git a/resources/builtin/alphanumeric/Pd.png b/resources/builtin/alphanumeric/lato-dark/P.png similarity index 100% rename from resources/builtin/alphanumeric/Pd.png rename to resources/builtin/alphanumeric/lato-dark/P.png diff --git a/resources/builtin/alphanumeric/Qd.png b/resources/builtin/alphanumeric/lato-dark/Q.png similarity index 100% rename from resources/builtin/alphanumeric/Qd.png rename to resources/builtin/alphanumeric/lato-dark/Q.png diff --git a/resources/builtin/alphanumeric/lato-dark/R.png b/resources/builtin/alphanumeric/lato-dark/R.png new file mode 100644 index 0000000000000000000000000000000000000000..7213cb49110cbdbecf433ddb273cac3c850abb72 GIT binary patch literal 1259 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPK4XW^J*rbC!W@n3Zr_0@nm~rp6--3@l-uE{-7;ac>S7G6IzzQuw{x?5JG?H_=u- zcyl*;mA0h_%SD~3uYPVY`G4`7fAhXwZx276@j%G3m35`iy?e7x$)~T|s(0GT*U@Fd z#Gvh|_DvlM%3t@q6Hq#F;`6R34#AWq>&k&-N?bIMd}7)v;OI6_yM@E((sVHw7D*LF zptf{=#ipJs)=M~oen~m8NZyR{5L{y84pPpg)ilL)1xHX^rLd!eQj>-f$Ga5qC2t&E zC)BlzIG&OTVbSys5L_bjQ=#dDxA%mX^_z6k=kEXgR@>v=vwPET)$?4M&9I-rDCazT z;W}=kqCLO-9jfZgn^baN_5{03aD4PufOXOx(Nb|il}I~Q%g?1F?f78=y!6yl^E-aipE)&{Wl|25Qc3=^75pe7Qx>>)i z$%0A0L&5LBW`|juyLBdXeidG)pq+ifaYAn?ui%o!cAHo%BNi`dnzP0@cEa($QW_KH znr7>Il&T6aKPi5re!pA6c-2Oh$iVsx;V17_%+zsAyYghW!g?pGORScG+-F!K1GN9K zR8Eu=5?pdM$U?nCA(;K`WAP{V{;?|Dab(H#es0sRaH6*C%;kipEw6neYYP{JPe{Id z%Ky`rKYlEkm%o1A`~EM7dCi1h_h0@g7p$>&;gA0%((+!BXVuiH@HK0p%Y=RR7+nP3OkX$k z>Ustxj_=zw98cZ()XKpmAlRbwXhBSSr-j$8Z{lxK%C~*L7f`I$q#~ZN$#H^WQ)G~u zhu^u9W`*R1oaw$Z71&pAVL8d9q3g)8RFz}@78c2+tvA+boY2s{;QX!0XU+a)+><7U zMm23=4~S}F@bVT2%j7(yuj|;Royosa!7?&?6HDfrv(uYW(x*;SxXA!CW9b%_htq-V z2K-Ym`h8fV&m#jeYZ&*PNVz^z)$~a}3 zLc=AYmiQ=el3xRs(8>m?+06_zVGXvU<@ts21-wk%Z!Dv-Px y|G9eN=lNw19DpT3L*j+MEAtJSqL_#*78;nBZR*r|H+|QAkOogzKbLh*2~7ahh|zff literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Sd.png b/resources/builtin/alphanumeric/lato-dark/S.png similarity index 100% rename from resources/builtin/alphanumeric/Sd.png rename to resources/builtin/alphanumeric/lato-dark/S.png diff --git a/resources/builtin/alphanumeric/Td.png b/resources/builtin/alphanumeric/lato-dark/T.png similarity index 100% rename from resources/builtin/alphanumeric/Td.png rename to resources/builtin/alphanumeric/lato-dark/T.png diff --git a/resources/builtin/alphanumeric/lato-dark/U.png b/resources/builtin/alphanumeric/lato-dark/U.png new file mode 100644 index 0000000000000000000000000000000000000000..467c8a9139838a6ba865e3483d3df8c7113b63c8 GIT binary patch literal 1094 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKL9LzwG?TN?!0V(4EpAc6dO)6N->UI*SN3bNw zFPOo1W^t`mo0@^JtTR{EgoLp6oF*v-2Ih^PE{-7;jBjr}pVnk0(r|Hda~D(7`~TCn zf4^7#h^MQ3)Gt(bhYhT%{+s@boI7=#vS;O&m=MO$r?f97;e2gaV6j zkR!2)(NVxffJKl6MgbX)0xXVT3L*hyg5+T$AbA23T?+ms9jo#m3tBnGy>_pc4c$BO z>v_G6z3;zCEa}co3zPq|d5v^(?ejIWd)Cx{%Utumd&TdH>5fISJIj(*>PSWe!F}0Max%yzj=ysmQt9%D>!z>0-h|BepC36rr=V>1*Dc15C)tAE zgibI0{N>H_4(B&vC)Mx&klTDvw=DYv+j4dNlW&suKg%hoc^7CaK=9 zSnYk(GJ1;pdj($ZOJ}0~3)Riqe9-1?Ws2#!cKu}Dr;m@FzZE2Y`_;a_bj$jEhjOP& z-@mFCpjW)j;^?{Fnf^21TvnVt<;Kp;b87A7Vv(E9s(#Bm`Aw<+zoz$_d#cj0%a4CQ zp|~S$@!>BY`_}F}7n$t7eum#qx7ctm%Wt*yI!j}APZQ(4e)7xCwRS%? zPm0z$7+<<`u3pA{w`=LlnMP-#ze+TP-@4I%(BAshLXWz_~DVSlUNVt*%*PtbI{)_WRCx&7r=J74N??h->;9do26j`ryYC z&u!PcEt~gTvtmnK%&w~LrC&bU#QfSAvwMI0%U#)$zZJI~zVP3NmAJgs@PFrf#_KZP U9_1_xdO=z|UHx3vIVCg!0IcV_@&Et; literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/lato-dark/V.png b/resources/builtin/alphanumeric/lato-dark/V.png new file mode 100644 index 0000000000000000000000000000000000000000..47626ba4ee79b42a50c975391670ed5f6547e4a3 GIT binary patch literal 1497 zcmb7Ei#L=B6dxmIqDisJ5@uyOZ60GYt2G{Z3>lBe^CRO`j7lS!A>&Or4u>y~i6mk+ zE3+k%j7NqewaVj*uO&m+@EMQAlr>(rT914ZP zQSB(MD3lbqmssgtrZMpK_AVH@IJ(>H;{T0G8QZtJn!`-j^KK||ar#v`>qyYRDL^S+ z-Sb5AZ#rfulnjMRv2?#BH7`is>z-7;ReiJ?{htRFl{Pz;6ksY0d=DL`ti2lUV`T%% zP3+#)MDao|t}6IK_j+f6`D|J?Yeu1Y*3IzaI=G^Jzp1YZ9UnF^y5O(*VIAP+>Xnsj zQC3*y)3d1#Gm$pp1M!Rhgu!Z$wTDutWApTPK=+GgrgHJjiLhDlti>1V_ybmqZRO^8 zaObFb?jLm@>RI7%c;4(t88h=mpfFYZEww`_QI*^1rfPItou@Y0n7x{WOS%1 zx5wklIdgf4?)~aYu-uZSaBkUWW=5*k@B2YC61#~hz9wir37n~D4ywp#=l|+K0JjSY zAMz` zo>b+oDaYK6kcQUyryB6_PdALZZhGTj*!s*}XjfPWtMd_>i)O~^J~?-xY% zn}EGt{EB2PJ55oDB-Ba@iQ{4BoRh@@QjdIw1~+%wTlOFh%5Xa%UnzyO@aS_rDNH}O zM?$BSFSkn?61;fYM*szUX$h;5?e(0b4CH2EPFvfBMc>4?nk9dFiG}Dj4jDOU=u`g7 za2I?$xfu*pfMyKk&)zGyl%#ajr41x8e}q>be<0rR4WQ`_2ZA*5!0ndlHOr8J4iyXj zG0~G4ultSIA%gsr6h!bQiVLKXJf05wWQv$od@UhR7f<7`%o695#nUS!kp`Ej_g+6+ zl}lVGx-3j$#=xRcmd_7^Bb$p4LvU6OcLmu*2H>W$T9OkVPkm>95j+SxZS-HmI>8ei&$`c9wX;LVo}GG##I3eY zH0~8w21iowvZzFwiJfH0M7#A1M_l9pT^!5XcCOoQalO11SNKM+<_Q^JqSC_%rFtBuEOjYF7-8LhMN!dE5_EM~+brbou6_UU3AX!7(4Dtg U`Xz^p#`YvsoAZ<>Rskvh0ug4a!vFvP literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Wd.png b/resources/builtin/alphanumeric/lato-dark/W.png similarity index 100% rename from resources/builtin/alphanumeric/Wd.png rename to resources/builtin/alphanumeric/lato-dark/W.png diff --git a/resources/builtin/alphanumeric/Xd.png b/resources/builtin/alphanumeric/lato-dark/X.png similarity index 100% rename from resources/builtin/alphanumeric/Xd.png rename to resources/builtin/alphanumeric/lato-dark/X.png diff --git a/resources/builtin/alphanumeric/Yd.png b/resources/builtin/alphanumeric/lato-dark/Y.png similarity index 100% rename from resources/builtin/alphanumeric/Yd.png rename to resources/builtin/alphanumeric/lato-dark/Y.png diff --git a/resources/builtin/alphanumeric/Zd.png b/resources/builtin/alphanumeric/lato-dark/Z.png similarity index 100% rename from resources/builtin/alphanumeric/Zd.png rename to resources/builtin/alphanumeric/lato-dark/Z.png diff --git a/resources/builtin/alphanumeric/lato-dark/_default.png b/resources/builtin/alphanumeric/lato-dark/_default.png new file mode 100644 index 0000000000000000000000000000000000000000..48be8a15eb1544b883c63c0f03c686ec51d8df17 GIT binary patch literal 3471 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 delta 31 pcmV+)0O0?$2DAo{X%s*(5WxQ+(C}b@ppZ~-;IO&(`%$rdw*uyX599y< diff --git a/resources/builtin/alphanumeric/2.png b/resources/builtin/alphanumeric/lato-white/2.png similarity index 95% rename from resources/builtin/alphanumeric/2.png rename to resources/builtin/alphanumeric/lato-white/2.png index 84ab492820675746eb8bb6e3a2394cdc3b800fc2..af3294627cac4b1840b9b7f50f7c5884286c54f2 100644 GIT binary patch delta 31 ncmbQwIiGVvrU;*vYmj&MC4|@Or diff --git a/resources/builtin/alphanumeric/4.png b/resources/builtin/alphanumeric/lato-white/4.png similarity index 93% rename from resources/builtin/alphanumeric/4.png rename to resources/builtin/alphanumeric/lato-white/4.png index a76d5d53a508e95b0c84eec132a6705230d10c63..bd208785ca1359a98d5dd273b673105f44c7083f 100644 GIT binary patch delta 31 ncmey#{*!$|rihhx)3dc6vN!h3Pn}TA7k=tF({8(swKdED=Istf delta 31 ncmey#{*!$|rig>Vg#QNu6h2(oP_UpuAmKsce)BgQYipPR_16!5 diff --git a/resources/builtin/alphanumeric/5.png b/resources/builtin/alphanumeric/lato-white/5.png similarity index 95% rename from resources/builtin/alphanumeric/5.png rename to resources/builtin/alphanumeric/lato-white/5.png index 51b96c1bf91170d9b061b76d1e7de21c63596eed..d93fe585c12503357724ea12280146b631d308c3 100644 GIT binary patch delta 31 ncmbQrHI-{Zrik`4kK(nbtin^9ZtzWzoxjIvoB8yOwKG@%&&Caf delta 31 ncmbQrHI-{Zrij7+fQADP91;p9d=OZmu;GI3QVWKSwKG@%+5io& diff --git a/resources/builtin/alphanumeric/6.png b/resources/builtin/alphanumeric/lato-white/6.png similarity index 95% rename from resources/builtin/alphanumeric/6.png rename to resources/builtin/alphanumeric/lato-white/6.png index b12283a8f7dd72bacea231cc1ac4b11671428241..fc54fbe3170e22bb3067bd5e35b86c189db43e8c 100644 GIT binary patch delta 31 ncmcc5eV=l%57__! diff --git a/resources/builtin/alphanumeric/7.png b/resources/builtin/alphanumeric/lato-white/7.png similarity index 91% rename from resources/builtin/alphanumeric/7.png rename to resources/builtin/alphanumeric/lato-white/7.png index 198c8ae8300af2b91a51f3edfb8362a8a404b8e2..d77949da2ff4b7bd3f40d7f2432d9b4803c0f78f 100644 GIT binary patch delta 31 ncmbQqHj`~arpU7!Yv&hRoobpO>k*#Hw?|tidAH@p+Br-B+HMU* delta 31 ncmbQqHj`~arpW&f2R1Y~JeaURAt0eZ;DSMiQo@FfwR4yN>d+2R diff --git a/resources/builtin/alphanumeric/8.png b/resources/builtin/alphanumeric/lato-white/8.png similarity index 96% rename from resources/builtin/alphanumeric/8.png rename to resources/builtin/alphanumeric/lato-white/8.png index 22413d368aa6d86b316a7ac86632c44b67a82841..4664d06d81b2d9acc7e0c7721ec7c7554fa97a43 100644 GIT binary patch delta 31 ncmbQrJC%1rrihicM{(2IXE$WSC+y)nH9vKS$eNoQYbDqK&Z-TV delta 31 ncmbQrJC%1rrig<U_-&?f@?w>YbDqK+i(sj diff --git a/resources/builtin/alphanumeric/9.png b/resources/builtin/alphanumeric/lato-white/9.png similarity index 95% rename from resources/builtin/alphanumeric/9.png rename to resources/builtin/alphanumeric/lato-white/9.png index 94c8216648b6f53ec19b931bb56f238d35a95a8e..66058e023dc5c7e9a5bf490a55b870735e8f3b27 100644 GIT binary patch delta 31 ncmcb_eTjQQrU;)^c=3d_d!C(2)xO~|ze#qH>xA}- delta 31 ncmcb_eTjQQrig$;Lc@Xs7ydseF!&I#VS+;T-viAXYeQK9@175O diff --git a/resources/builtin/alphanumeric/A.png b/resources/builtin/alphanumeric/lato-white/A.png similarity index 95% rename from resources/builtin/alphanumeric/A.png rename to resources/builtin/alphanumeric/lato-white/A.png index 319b396aef51fa66993c173490cad4ff77fe1619..284ce2a060a5fcf4fecc4732445a46f2013fc20c 100644 GIT binary patch delta 31 ncmZqTY2ulXDYEBTllG|z9(*_EhszePO|?2=eyLz%Z7VAP)^ZKV delta 31 ncmZqTY2ulXDRSZe1cL_)0t7y6NKj}vP~cz|pqRR`wv`nC+}{mt diff --git a/resources/builtin/alphanumeric/B.png b/resources/builtin/alphanumeric/lato-white/B.png similarity index 94% rename from resources/builtin/alphanumeric/B.png rename to resources/builtin/alphanumeric/lato-white/B.png index e6750a8db521ade2f9bdf16ebd9c33a7e761ca32..3fa4722ab39231549b03471e298f7a8510ed639a 100644 GIT binary patch delta 31 pcmV+)0O0@s3I7R@X%srW& delta 31 pcmV+)0O0?t3#$u|X%s*(aDbq|@c-aoAW+Z{u#ocnkU_D1E(PfW4;cUe diff --git a/resources/builtin/alphanumeric/D.png b/resources/builtin/alphanumeric/lato-white/D.png similarity index 94% rename from resources/builtin/alphanumeric/D.png rename to resources/builtin/alphanumeric/lato-white/D.png index a7168099132b43935a9b6f22175d98d23dcbccf2..e100162e2abfce8132e61b2a2cf4ff70833795f1 100644 GIT binary patch delta 31 pcmV+)0O0?{3B?JJX%srXsVYdu&1?P3nT diff --git a/resources/builtin/alphanumeric/E.png b/resources/builtin/alphanumeric/lato-white/E.png similarity index 64% rename from resources/builtin/alphanumeric/E.png rename to resources/builtin/alphanumeric/lato-white/E.png index 52347141a57b07e0ac4e732aa0f0718a9ff0d387..0e6a6486085d609d4423f0ecce98889402276f2a 100644 GIT binary patch delta 19 acmaFD^n_`GD~Hvy;?$E7ye%7j#Tfxn76)no delta 19 acmaFD^n_`GD~H4XhJv2NX0eUF;*0=NO9yoT diff --git a/resources/builtin/alphanumeric/F.png b/resources/builtin/alphanumeric/lato-white/F.png similarity index 82% rename from resources/builtin/alphanumeric/F.png rename to resources/builtin/alphanumeric/lato-white/F.png index 148167e17a499fefb25fe6c47cf167bbb8f56e62..c0f43e59b34a68d79d7219a50d6d6f3a645f52e7 100644 GIT binary patch delta 22 ecmeyy^o?nPAGg)B;yr7_C%9#;{k<_#mJtAXTM9h@ delta 22 ecmeyy^o?nPAGgE*h6@K07A%sxEwC|CmJtAZunGJC diff --git a/resources/builtin/alphanumeric/G.png b/resources/builtin/alphanumeric/lato-white/G.png similarity index 95% rename from resources/builtin/alphanumeric/G.png rename to resources/builtin/alphanumeric/lato-white/G.png index 259733582c17ba7e7a809adada5113b83c39d778..4a15c197ba7eab237d2f7da8a086e8e5f7359cff 100644 GIT binary patch delta 31 ncmcc2eVKbgriiwctVi+M8_(wR?U~SYDm6UV<}lO7+AvlC)v*mw delta 31 ncmcc2eVKbgrig)qLO{cT5C1m^Tv#ySK|umz^8AMzYr|LpQhs$;Yz&oT1ORSg38(-7 delta 21 dcmaFI^p0tQHHq)$ literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/J.png b/resources/builtin/alphanumeric/lato-white/J.png similarity index 57% rename from resources/builtin/alphanumeric/J.png rename to resources/builtin/alphanumeric/lato-white/J.png index fb92c9c8f1d22e2a4359619086b310d6a32f1ccc..a7ade6ba348837322e053a3443c0420ac875ab46 100644 GIT binary patch delta 31 ncmdnQwux;*rbzL#wN3MHSjlRKr%pJv$Ad2`zK?5T?N%lL+W!r0 delta 31 ncmdnQwux;*rbxs80~0oUa8NKvC|K~|LV$qnw^*Z%wOg40>)Q^b diff --git a/resources/builtin/alphanumeric/K.png b/resources/builtin/alphanumeric/lato-white/K.png similarity index 94% rename from resources/builtin/alphanumeric/K.png rename to resources/builtin/alphanumeric/lato-white/K.png index 847f995d2fb8a10805d59ffd09193b43ffc1520b..894f16abf93906de5b7d82b445efa6a4b8f2848f 100644 GIT binary patch delta 31 ncmeyy`Hgczrij%u?c%k2Ch(m~y%FBzF<;iU?fKn}wUsOY?GFy; delta 31 ncmeyy`HgczrijCTgN6ea76?2j_>eFmV1t710zsdRwUsOY^n(t7 diff --git a/resources/builtin/alphanumeric/lato-white/L.png b/resources/builtin/alphanumeric/lato-white/L.png new file mode 100644 index 0000000000000000000000000000000000000000..61889a13cb23673a89d59cdd0ce2018b02c6b79e GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKLOw2%$zZdVt11Zh`pAc6d{T~d9E0!h$Im{(N ze!&b@&!%mQeFfxJd%8G=R4~3h>&n>Rz`$ToG@&iy$wHNXN4}CF3E^R2Gbs!N32O=}2uKi_0fjCS+JML-fHGASO;pek6eS4Cu%Oe4 z4wc2{pcF94C}>3y6%+-FA*NWRAUZq>6pKPI0>uaNkn}FK|JysWd(XY|JLi1&+{clq zi0{}IJPQB-J5(%^0Dw^RXJ!ItYBpMkX= z+Ipp`2x%i3=Fh*wRzgF<;t z^vGvxnDRqImy-CqOLkUKd!j;7|G;M6c)$PHWWQgwk^g8fM$WjsZmKe_#-@8S6~V7J z0aBe_*C#bP04g@MPqz#iZ^`(>P`Hi=td}po7TS#;8;@U7fKL&x3c0s0Iui9*&w02e$E9F zEzb;3=3jP0CEDf@Qau=Nf~b3`9>iWPv?YGnk-ry}m6H-+e@Pg~#e>(V(YEQX_)bS^ zD|9~I6(7f;yw}Dtoab1)pA#T-nx5ko!w5SBmUuApqzB?1OSqC^uKlnx(I%ud9%BMR zo1AZhz27D5Ovolr*5(55FzG?RmB2L`x<{kUdVdzh^TG(zv${P95OdJ5L^*4~#YbCf zsOL8X=-k7dQ}97lH{;~1-8nPfeaP@s;G-=|+8sd_$8dSl--zK-2Xr7yu>N-!`IQ({ z)1H5glw4(@;;eJUoM(0uCE+Gwz23f{EVsiEmE1Yn$3M~YW**|2?KCQkYvrS2{q(_{ z5Lw0wicPgmAPukn%yn-###E24-nUzx>O_E|RSwb&HgG=G`{c&qZ4)2N8I=A_QvR$V z;~@}QV4LnL~Q}_Ml4(T{XmwD1Q@0)?-f4$gMmCY)crZ`; zrsF3jB1-*NP)G}M*r+b%KM$TN2Omu>U_wQfyap%VMLORk4YSM5@a}>LnSS6VP7eLp zTH51bhD)UHwr3EP+>r&5qLvX`1~sdV|JroRT-p*^u$jw|xZo9wf0>!-|BRD^+cL0h zL6&^f6p>|ZSfie-KG0VMLq^jPunOT6iw>}G{KK}12pYV6dxj;d=%81c2b7VbXDjbO zIP1k(aW`->=`+ccXvU-pf^q$ta_=6NA{?G-gAD}OLK8ywz`})WwFv{O5?XYAawUP% z=i7U3-($o8U6(naYA+07VCRK$wv0=FR-S5Z0aK#G22UuTIrF5E@Pu5(HKl2E;vug7 z){6I1L~r!VZ3@6(ii^TqPmZQrJVXTpjVkL(Xeh&Fj}!WL8WD_`GPa-d!r(=^J;=(o zT~N0ZC&ORfiF)~!i?t%VJ6)OOcfF2@XgclQ#@-u)Jokk4zL|8Tj4e|uZ6oQ7`yKuo z{*`7;mA0EI4}s(BdZfEHVuay<9>2KH9nX@sSJzpgx=L$j6rPduneFbdUfsi;2`ohB z)gEGf z!H){l(EGb*Z4fXo5*NbwGJ(gO$`gS_Vx3&hf)&n5dVEZZ6!zV+;4HCXP|25#yvz*x zU@UcduJW0H##P7n5ByJe9&pEd&kSz58sccFm<4dph%fm~suKJzz=t*w^EF<|NK~m8 dC4AX43&4e^}AAv7dHRJkfK?;kq;j`;up literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/Nd.png b/resources/builtin/alphanumeric/lato-white/N.png similarity index 72% rename from resources/builtin/alphanumeric/Nd.png rename to resources/builtin/alphanumeric/lato-white/N.png index 84487725b925042b3d9cc822dc78faad08d0b855..051ec3c09d7ba64161cf1ca5e6afb9e6d4f2cedb 100644 GIT binary patch delta 91 zcmey%@t0$QPT+qM!S<<-niv=u1WSVaf*GuyothtByhrbAe|chfZfelR+RLl};AajE delta 31 ncmcb>bAe|$Qpb(UPV=1L*Jr z#|X{Osuk`WlDbxO>{^2G`crwmLgUJxz8Uzt_+qlAUU>msY6b3Z8rG!bn9kPCIJ%UF&)!CPWgl%=X=lejB(*F}Mk%6d?|bA<^Z3s1u|E@U zed%Dlr$AKaGaGGGwHpVL3?!n`{3ard$7Ly0)e|l=+bV(_KGZW!0~|mUkHrM;B<340 zE6^N6uK246vMMv!!I-5er>I6wp^o}~ONQ}`^$6RaaA`cRKnn^G)2(p0VZ%v*5(rbl z;Lz9m1a$5Mh0#kr?TDvml~dR)`MRx1$+jU#YfG~`kuk(oqt?<&Az6`GZ)56;-$ZF` zJJCdGXofB2c|~hUaqy)>7d-W)FZN$Xv$?+{QQ5U#|2T?htW3jNHj2VGv83NYC*@gt$LIWV@+mRMu8MSFBta`4G(hsnfI!@D`+^@FhF z*XL_v%lU=QVfdOXbmJ&IzWKqA7sDu%xrlC=UU=5s!AL`ifJHZA$WZ``EKAY*4j_v6 zFtlS99QyGiR8!m}honu>wP(u`nD`H3Z-(|}HpGBe>!iug{p5&ljTK3C5ChXQ z?F^Y;D{8f0Y~1B%rQ|N!2B$Fbv=%RCxc_6pm-RNPir`TcpSe<^^krdou@b6^A`lZ$ zWE4F^LN&=G8Yeo|?cL;)$kg|~klsc^M0K8cE>!1qO=yqD0>flh#=6IE(dWLEP9N|S1^ zu=zZVPYQ>P)o8Z0a+RiIu`sq->0HO|SaN6MpuI<+v_Xz?zdbmxA`UW>@5xWaV_iUl z51bFaB?R_MI=XpeH6=J?2c9daNGFmk_fE6SW-)NYOQ7L=qaBvGn(-yVY)Jm3`_+BJ zB~;xm7WOYt8-4{;0gisu0%!=pbL2~?X}5rxIJ1v!K%>7`T99OMCl$H)iIzSpnZ raNR=(bs*u*jI)oOl~>iTR}&y;qQ14ncj;W!kU4=D!RIvZOCbIO7k?1| literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/S.png b/resources/builtin/alphanumeric/lato-white/S.png similarity index 95% rename from resources/builtin/alphanumeric/S.png rename to resources/builtin/alphanumeric/lato-white/S.png index 2ceddf040b47dcfc716c383e7cef434fd3bd5180..8992f0f6a02680c811d26ce8db6ac256abe49b2d 100644 GIT binary patch delta 31 ncmX@geUy7brU;*vwrug*Q_uEzG|iuIBQ-pjp;>2Rtp_Ur&I1h8 delta 31 ncmX@geUy7brig%pfkMN92mdbwOxUpCLqWo?hh~WzYdu&2<%SO$ diff --git a/resources/builtin/alphanumeric/T.png b/resources/builtin/alphanumeric/lato-white/T.png similarity index 82% rename from resources/builtin/alphanumeric/T.png rename to resources/builtin/alphanumeric/lato-white/T.png index d970924b6a6d74e16397394c6b9e70c4d63f76e9..5c9393b0ae519363bc1b63c31b1d31b30c50eec2 100644 GIT binary patch delta 22 ecmaFD^n_`GAGg&r?X{y delta 31 ncmcc0ag}32rbxs80~Zn=I0Psd6bNkiuwcURdRCi_wKtdn@S6_T diff --git a/resources/builtin/alphanumeric/lato-white/V.png b/resources/builtin/alphanumeric/lato-white/V.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ffde704447277f369d19c8c1fb4fed983fc4c7 GIT binary patch literal 1490 zcmb7EiBnTY7>`v^IZfphLV^_$s3;|(KBNvxBmo-;M@fhYVXz=nL?lRwfHR2^F**UQ zm4ZO4&p{xNpmGTWxr>Y(k0Bg_SdhZwEXV^*2<_UxzUIf0!?LD>pB1zzf*w}fdBkYsk}QT1a5e~KRo~!{MXBT!yifp zsPP$uT1O$&`E6+%4!7Bz=IIgm6L{Ru4A(HRf~myyv9&TFO^Mq51XN#%G(Wn{oy-u*Pf=5 zvxvW~z?#UByq<`^BNsy#-fNTdOkquz!HfwaCmIJWOEOY(kwFVok>^>H zoW^H%J>Xp64dP`BtEodGEQp_DLQPAUVC=KTy-;To zI)n^d4rv5I%VFCi!h{iV9BM~UnavIAAkvkE+QY*n?bU>FF&-hhACL|??u3btVindl z+QA(m{F9LE&|LVJh*bDd-}-}=5j@(j{dg2NQzHz?m>=KhJ+9aFK#_MUv4uhxVzN5N z<7!65X>&_h1N9vWg_|Ha^lUlX+!59YU5~5T@+yf75?0s#e(7>ZgF51wqpJ-o#@Qs97q5c3musBsY2O2tJAi}bC^a`x!z>V+e=1XXZ#unIusDlPxf zF(z?z)FjbaPZb#hj!|3Z7?ETwtGu`6$?h{1ZYI=Y?JLfutc=b+LoAnrN9OV^8^aO% z`adp|+vHm2T--vfgL~J88na~7Gz=^0jm6jS+-sjS`K6+b;=cJY9VQVv;J=%o@@Xp_ z_z^!R|N5rL7F8(QSuMBuOrwkbm!*8~@%Q4mr+`p+TUoykR3c@`<+te_y<%sjH)LSM z@?C+O)a&O`2j5+PmMHBG+m7xN6}Pq+DBj4I)(nualq6F3UP6PwZlmZ6l)QSSXu=0L zw3iNeK=!kfIl3r$+3BW78h`psokJ#_J$l!ik`S4Kb)0GM|F+zsFTrYwC{ZZk<8g? zP+8whiRI}suBcdI$#WNgCp9wCvT3Fhe7Q)t>G^)7dZ;0fpPiCPFLptq7AcTH{Z&45 zv^hxera3^tZT3*i-{mujl>N+A3iL`zE$FjA1Cul9B4E8tfntDW{tFMS=AHlm literal 0 HcmV?d00001 diff --git a/resources/builtin/alphanumeric/W.png b/resources/builtin/alphanumeric/lato-white/W.png similarity index 97% rename from resources/builtin/alphanumeric/W.png rename to resources/builtin/alphanumeric/lato-white/W.png index cf24b5049660d1e2fbc7d65c3511c7269afe51ad..60b3c36088f8e8b1007826f52ed71ff173bbaa38 100644 GIT binary patch delta 31 ncmeAZ?h~GnDYEC;sR`k-O>1w=Pvz4tw(`h3v59|Utso}=-5?D( delta 31 ncmeAZ?h~GnDRSZeg9Ql+6ApaXP#|E?;1IA+Df-sNT0u?#>;w)h diff --git a/resources/builtin/alphanumeric/X.png b/resources/builtin/alphanumeric/lato-white/X.png similarity index 96% rename from resources/builtin/alphanumeric/X.png rename to resources/builtin/alphanumeric/lato-white/X.png index ce32aafa850d225612df1c64b0f105255671a891..60c82d00eb9aca40a50cb621abaa69506b410e93 100644 GIT binary patch delta 31 pcmV+)0O0@T4CV}wX%r6F=B-y9ki09(b7h}8f=HlV+|99l=>_c-4_*KO delta 31 ncmaFH^NeRgrij3Y{|6Ej7F;lR&`_|!VM2h{C6khkwJ%u#_7e|L diff --git a/resources/builtin/alphanumeric/Y.png b/resources/builtin/alphanumeric/lato-white/Y.png similarity index 94% rename from resources/builtin/alphanumeric/Y.png rename to resources/builtin/alphanumeric/lato-white/Y.png index 95ec8bc41a86b744d5d42554aa3290f10513a838..1f6bf139a2e639420ab05f7d5de22ea5c0a38abd 100644 GIT binary patch delta 31 ncmdnUxsh{1rpSb6Yg1*dPTk;Z(k|W;?lFJXjdI?NwI(b8+wTpB delta 31 pcmV+)0O0?z39$)~X%wLUz;GZy;P4QTFo4itP_Vjbw$HJBGz9Ho4-WtU diff --git a/resources/builtin/alphanumeric/Z.png b/resources/builtin/alphanumeric/lato-white/Z.png similarity index 92% rename from resources/builtin/alphanumeric/Z.png rename to resources/builtin/alphanumeric/lato-white/Z.png index e8892e264be526e260ea6fdcab4466a2b1b05e0c..6f06c52cdc8848879eafe0670c065ea357f513cf 100644 GIT binary patch delta 31 pcmV+)0O0?{2E_)DX%wyIb5}ZL4v^R#NXopQD}n)%u;;OT$O7H34sQSe delta 31 pcmV+)0O0?{2E_)DX%xW!fM7sy5TNiNP~gz8Fp%}h>=Chj$O7^I57qzx diff --git a/resources/builtin/alphanumeric/lato-white/_default.png b/resources/builtin/alphanumeric/lato-white/_default.png new file mode 100644 index 0000000000000000000000000000000000000000..e6be0699194aade8e5d672db563bf7f83166f6fb GIT binary patch literal 3621 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 literal 0 HcmV?d00001 diff --git a/src/applications/files/builtin/PhabricatorFilesComposeAvatarBuiltinFile.php b/src/applications/files/builtin/PhabricatorFilesComposeAvatarBuiltinFile.php index 098254ffa6..29acacc188 100644 --- a/src/applications/files/builtin/PhabricatorFilesComposeAvatarBuiltinFile.php +++ b/src/applications/files/builtin/PhabricatorFilesComposeAvatarBuiltinFile.php @@ -37,7 +37,7 @@ final class PhabricatorFilesComposeAvatarBuiltinFile public function getBuiltinFileKey() { $icon = $this->getIcon(); $color = $this->getColor(); - $border = $this->getBorder(); + $border = implode(',', $this->getBorder()); $desc = "compose(icon={$icon}, color={$color}, border={$border}"; $hash = PhabricatorHash::digestToLength($desc, 40); return "builtin:{$hash}"; @@ -46,7 +46,7 @@ final class PhabricatorFilesComposeAvatarBuiltinFile public function getBuiltinDisplayName() { $icon = $this->getIcon(); $color = $this->getColor(); - $border = $this->getBorder(); + $border = implode(',', $this->getBorder()); return "{$icon}-{$color}-{$border}.png"; } @@ -55,8 +55,53 @@ final class PhabricatorFilesComposeAvatarBuiltinFile $this->getColor(), $this->getIcon(), $this->getBorder()); } - private function composeImage($color, $icon, $border) { - // TODO + private function composeImage($color, $image, $border) { + $color_const = hexdec(trim($color, '#')); + $true_border = self::rgba2gd($border); + $image_map = self::getImageMap(); + $data = Filesystem::readFile($image_map[$image]); + + $img = imagecreatefromstring($data); + + // 4 pixel border at 50x50, 32 pixel border at 400x400 + $canvas = imagecreatetruecolor(400, 400); + + $image_fill = imagefill($canvas, 0, 0, $color_const); + if (!$image_fill) { + throw new Exception( + pht('Failed to save builtin avatar image data (imagefill).')); + } + + $border_thickness = imagesetthickness($canvas, 64); + if (!$border_thickness) { + throw new Exception( + pht('Failed to save builtin avatar image data (imagesetthickness).')); + } + + $image_rectangle = imagerectangle($canvas, 0, 0, 400, 400, $true_border); + if (!$image_rectangle) { + throw new Exception( + pht('Failed to save builtin avatar image data (imagerectangle).')); + } + + $image_copy = imagecopy($canvas, $img, 0, 0, 0, 0, 400, 400); + if (!$image_copy) { + throw new Exception( + pht('Failed to save builtin avatar image data (imagecopy).')); + } + + return PhabricatorImageTransformer::saveImageDataInAnyFormat( + $canvas, + 'image/png'); + } + + private static function rgba2gd($rgba) { + $r = $rgba[0]; + $g = $rgba[1]; + $b = $rgba[2]; + $a = $rgba[3]; + $a = (1 - $a) * 255; + return ($a << 24) | ($r << 16) | ($g << 8) | $b; } public static function getImageMap() { @@ -64,21 +109,106 @@ final class PhabricatorFilesComposeAvatarBuiltinFile $root = $root.'/resources/builtin/alphanumeric/'; $map = array(); - $list = Filesystem::listDirectory($root, $include_hidden = false); + $list = id(new FileFinder($root)) + ->withType('f') + ->withFollowSymlinks(true) + ->find(); + foreach ($list as $file) { - $key = 'alphanumeric/'.$file; - $map[$key] = $root.$file; + $map['alphanumeric/'.$file] = $root.$file; } + return $map; + } + + public function getUniqueProfileImage($username) { + $pack_map = $this->getImagePackMap(); + $image_map = $this->getImageMap(); + $color_map = $this->getColorMap(); + $border_map = $this->getBorderMap(); + $file = phutil_utf8_strtoupper(substr($username, 0, 1)); + + $pack_count = count($pack_map); + $color_count = count($color_map); + $border_count = count($border_map); + + $pack_seed = $username.'_pack'; + $color_seed = $username.'_color'; + $border_seed = $username.'_border'; + + $pack_key = + PhabricatorHash::digestToRange($pack_seed, 1, $pack_count); + $color_key = + PhabricatorHash::digestToRange($color_seed, 1, $color_count); + $border_key = + PhabricatorHash::digestToRange($border_seed, 1, $border_count); + + $pack = $pack_map[$pack_key]; + $icon = 'alphanumeric/'.$pack.'/'.$file.'.png'; + $color = $color_map[$color_key]; + $border = $border_map[$border_key]; + + if (!isset($image_map[$icon])) { + $icon = 'alphanumeric/'.$pack.'/_default.png'; + } + + return array('color' => $color, 'icon' => $icon, 'border' => $border); + } + + public function getUserProfileImageFile($username) { + $unique = $this->getUniqueProfileImage($username); + + $composer = id(new self()) + ->setIcon($unique['icon']) + ->setColor($unique['color']) + ->setBorder($unique['border']); + + $data = $composer->loadBuiltinFileData(); + + $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); + $file = PhabricatorFile::newFromFileData( + $data, + array( + 'name' => $composer->getBuiltinDisplayName(), + 'profile' => true, + 'canCDN' => true, + )); + unset($unguarded); + + return $file; + } + + public static function getImagePackMap() { + $root = dirname(phutil_get_library_root('phabricator')); + $root = $root.'/resources/builtin/alphanumeric/'; + + $map = id(new FileFinder($root)) + ->withType('d') + ->withFollowSymlinks(false) + ->find(); + + return $map; + } + + public static function getBorderMap() { + + $map = array( + array(0, 0, 0, 0), + array(0, 0, 0, 0.3), + array(255, 255, 255, 0.4), + array(255, 255, 255, 0.7), + ); return $map; } public static function getColorMap() { + // + // Generated Colors + // http://tools.medialab.sciences-po.fr/iwanthue/ + // $map = array( '#335862', - '#dfc47b', '#2d5192', - '#c0bc6e', '#3c5da0', '#99cd86', '#704889', @@ -91,19 +221,14 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#4bd0e3', '#a25542', '#4eb4f3', - '#705412', '#6da8ec', '#545608', '#829ce5', '#68681d', '#607bc2', - '#d1b66e', '#4b69ad', - '#a4a154', '#236ead', - '#daa969', '#31a0de', - '#996f31', '#4f8ed0', '#846f2a', '#bdb0f0', @@ -121,13 +246,11 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#7f4c7f', '#a1bb7a', '#65558f', - '#c2a962', '#445082', '#c9ca8e', '#265582', '#f4b189', '#265582', - '#bd8f50', '#40b8e1', '#814a28', '#80c8f6', @@ -142,7 +265,6 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#b888c9', '#476025', '#9987c5', - '#828136', '#7867a3', '#769b5a', '#c46e9d', @@ -161,7 +283,6 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#45a998', '#faa38c', '#265582', - '#ad954f', '#265582', '#e4b788', '#265582', @@ -187,7 +308,6 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#ae78ad', '#569160', '#d898be', - '#525620', '#8eb4e8', '#5e622c', '#929ad3', @@ -209,13 +329,9 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#63acda', '#7b5d30', '#66bed6', - '#a66c4e', '#3585b0', - '#ba865c', '#5880b0', - '#9b864d', '#739acc', - '#9d764a', '#48a3ba', '#9d565b', '#7fc4ca', @@ -232,15 +348,11 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#6bafb6', '#8c5744', '#84b9d6', - '#725238', '#9db3d6', - '#816f3e', '#777cad', - '#a6a86e', '#826693', '#86a779', '#9d7fad', - '#8b8e55', '#b193c2', '#547348', '#d5adcb', @@ -250,11 +362,9 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#b2add6', '#5a623d', '#9793bb', - '#bea975', '#3c5472', '#d5c5a1', '#5e5a7f', - '#b09c68', '#2c647e', '#d8b194', '#49607f', @@ -269,7 +379,6 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#ad697e', '#799a6d', '#916b88', - '#aeb68d', '#69536b', '#b4c4ad', '#845865', @@ -291,20 +400,16 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#50959b', '#b27d7a', '#335862', - '#b2a381', '#335862', '#bcadc4', '#706343', '#749ebc', '#8c6a50', '#92b8c4', - '#a07d62', '#758cad', '#868e67', '#335862', - '#b6978c', '#335862', - '#9e8f6e', '#335862', '#ac7e8b', '#77a185', @@ -314,7 +419,6 @@ final class PhabricatorFilesComposeAvatarBuiltinFile '#467a70', '#9b7d73', '#335862', - '#8a7c5b', '#335862', '#8c9c85', '#335862', @@ -335,12 +439,4 @@ final class PhabricatorFilesComposeAvatarBuiltinFile return $map; } - public static function getBorderMap() { - $map = array( - 'rgba(0,0,0,.3);', // Darker - 'rgba(255,255,255,.5);', // Lighter - ); - return $map; - } - } diff --git a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php index e64ab2e406..1532003122 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php @@ -30,12 +30,22 @@ final class PhabricatorPeopleProfilePictureController $e_file = true; $errors = array(); + // Verify install has GD extension, otherwise default to avatar.png + $gd = function_exists('imagecreatefromstring'); + if ($request->isFormPost()) { $phid = $request->getStr('phid'); $is_default = false; if ($phid == PhabricatorPHIDConstants::PHID_VOID) { - $phid = null; - $is_default = true; + // Compose the builtin unique image + if ($gd) { + $file = id(new PhabricatorFilesComposeAvatarBuiltinFile()) + ->getUserProfileImageFile($name); + } else { + $phid = null; + $is_default = true; + } + } else if ($phid) { $file = id(new PhabricatorFileQuery()) ->setViewer($viewer) @@ -86,7 +96,15 @@ final class PhabricatorPeopleProfilePictureController $form = id(new PHUIFormLayoutView()) ->setUser($viewer); - $default_image = PhabricatorFile::loadBuiltin($viewer, 'profile.png'); + if ($gd) { + $unique_default = id(new PhabricatorFilesComposeAvatarBuiltinFile()) + ->getUniqueProfileImage($name); + $default_image = PhabricatorFile::loadBuiltin( + $viewer, $unique_default['icon']); + } else { + $unique_default = null; + $default_image = PhabricatorFile::loadBuiltin($viewer, 'profile.png'); + } $images = array(); @@ -163,9 +181,21 @@ final class PhabricatorPeopleProfilePictureController } } + $default_style = array(); + if ($unique_default) { + $border_color = implode(', ', $unique_default['border']); + $default_style = array( + 'background-color: '.$unique_default['color'].';', + 'border: 4px solid rgba('.$border_color.');', + 'height: 42px;', + 'width: 42px', + ); + } + $images[PhabricatorPHIDConstants::PHID_VOID] = array( 'uri' => $default_image->getBestURI(), 'tip' => pht('Default Picture'), + 'style' => implode(' ', $default_style), ); require_celerity_resource('people-profile-css'); @@ -173,6 +203,10 @@ final class PhabricatorPeopleProfilePictureController $buttons = array(); foreach ($images as $phid => $spec) { + $style = null; + if (isset($spec['style'])) { + $style = $spec['style']; + } $button = javelin_tag( 'button', array( @@ -189,6 +223,7 @@ final class PhabricatorPeopleProfilePictureController 'height' => 50, 'width' => 50, 'src' => $spec['uri'], + 'style' => $style, ))); $button = array( diff --git a/src/applications/uiexample/examples/PhabricatorFilesComposeAvatarExample.php b/src/applications/uiexample/examples/PhabricatorFilesComposeAvatarExample.php index 8b408b3af0..6ea5537f9d 100644 --- a/src/applications/uiexample/examples/PhabricatorFilesComposeAvatarExample.php +++ b/src/applications/uiexample/examples/PhabricatorFilesComposeAvatarExample.php @@ -15,10 +15,10 @@ final class PhabricatorFilesComposeAvatarExample extends PhabricatorUIExample { $viewer = $request->getUser(); $colors = PhabricatorFilesComposeAvatarBuiltinFile::getColorMap(); + $packs = PhabricatorFilesComposeAvatarBuiltinFile::getImagePackMap(); $builtins = PhabricatorFilesComposeAvatarBuiltinFile::getImageMap(); $borders = PhabricatorFilesComposeAvatarBuiltinFile::getBorderMap(); - shuffle($colors); $images = array(); foreach ($builtins as $builtin => $raw_file) { $file = PhabricatorFile::loadBuiltin($viewer, $builtin); @@ -26,17 +26,20 @@ final class PhabricatorFilesComposeAvatarExample extends PhabricatorUIExample { } $content = array(); + shuffle($colors); foreach ($colors as $color) { shuffle($borders); + $color_const = hexdec(trim($color, '#')); $border = head($borders); + $border_color = implode(', ', $border); $styles = array(); $styles[] = 'background-color: '.$color.';'; $styles[] = 'display: inline-block;'; - $styles[] = 'height: 46px;'; - $styles[] = 'width: 46px;'; + $styles[] = 'height: 42px;'; + $styles[] = 'width: 42px;'; $styles[] = 'border-radius: 3px;'; - $styles[] = 'border: 4px solid '.$border.';'; + $styles[] = 'border: 4px solid rgba('.$border_color.');'; shuffle($images); $png = head($images); @@ -45,8 +48,8 @@ final class PhabricatorFilesComposeAvatarExample extends PhabricatorUIExample { 'img', array( 'src' => $png, - 'height' => 46, - 'width' => 46, + 'height' => 42, + 'width' => 42, )); $tag = phutil_tag( @@ -65,12 +68,23 @@ final class PhabricatorFilesComposeAvatarExample extends PhabricatorUIExample { $tag); } + $count = new PhutilNumber( + count($colors) * count($builtins) * count($borders)); + + $infoview = id(new PHUIInfoView()) + ->setSeverity(PHUIInfoView::SEVERITY_NOTICE) + ->appendChild(pht('This installation can generate %s unique '. + 'avatars. You can add additional image packs in '. + 'resources/builtins/alphanumeric/.', $count)); + + $info = phutil_tag_div('pmb', $infoview); $view = phutil_tag_div('ml', $content); return phutil_tag( 'div', array(), array( + $info, $view, )); } diff --git a/src/infrastructure/util/PhabricatorHash.php b/src/infrastructure/util/PhabricatorHash.php index 00d7cca63c..7b5780460b 100644 --- a/src/infrastructure/util/PhabricatorHash.php +++ b/src/infrastructure/util/PhabricatorHash.php @@ -78,6 +78,21 @@ final class PhabricatorHash extends Phobject { return $result; } + public static function digestToRange($string, $min, $max) { + if ($min > $max) { + throw new Exception(pht('Maximum must be larger than minimum.')); + } + + if ($min == $max) { + return $min; + } + + $hash = sha1($string, $raw_output = true); + $value = head(unpack('L', $hash)); + + return $min + ($value % ($max - $min)); + } + /** * Shorten a string to a maximum byte length in a collision-resistant way